Skip to content

Commit dd74412

Browse files
committed
wip
closes #96 closes #72 closes #129 todo: close #57 close #139
1 parent 7c23c02 commit dd74412

File tree

99 files changed

+3393
-2645
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+3393
-2645
lines changed

CREDITS.txt

+6-6
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ SOFTWARE.
166166

167167

168168

169-
github.com/containerd/[email protected]
170-
====================================
169+
github.com/containerd/[email protected]-0.20230313162750-1ae8d489ac81
170+
==================================================================
171171

172172

173173
Apache License
@@ -471,7 +471,7 @@ SOFTWARE.
471471

472472

473473

474-
github.com/muesli/[email protected]20230316100256-276c6243b2f6
474+
github.com/muesli/[email protected]20211031195517-c9f0611b6c70
475475
=========================================================
476476

477477
MIT License
@@ -633,7 +633,7 @@ SOFTWARE.
633633

634634

635635

636-
golang.org/x/sync@v0.6.0
636+
golang.org/x/sync@v0.7.0
637637
========================
638638

639639
Copyright (c) 2009 The Go Authors. All rights reserved.
@@ -666,7 +666,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
666666

667667

668668

669-
golang.org/x/sys@v0.18.0
669+
golang.org/x/sys@v0.19.0
670670
========================
671671

672672
Copyright (c) 2009 The Go Authors. All rights reserved.
@@ -699,7 +699,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
699699

700700

701701

702-
golang.org/x/term@v0.18.0
702+
golang.org/x/term@v0.19.0
703703
=========================
704704

705705
Copyright (c) 2009 The Go Authors. All rights reserved.

cmd/lockfinder/main.go

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"flag"
6+
"fmt"
7+
"os"
8+
"regexp"
9+
"strings"
10+
)
11+
12+
func main() {
13+
if err := run(); err != nil {
14+
panic(err)
15+
}
16+
}
17+
18+
var logfile = flag.String("logfile", "mutex.log", "path to mutex.log file to consider")
19+
20+
func run() error {
21+
flag.Parse()
22+
23+
file, err := os.Open(*logfile)
24+
if err != nil {
25+
return err
26+
}
27+
defer file.Close()
28+
29+
l := &lockfinder{
30+
m: map[string]string{},
31+
}
32+
33+
scn := bufio.NewScanner(file)
34+
for scn.Scan() {
35+
l.handleLine(scn.Text())
36+
}
37+
if err := scn.Err(); err != nil {
38+
return err
39+
}
40+
41+
fmt.Println(l.report())
42+
return nil
43+
}
44+
45+
type lockfinder struct {
46+
m map[string]string
47+
}
48+
49+
var re = regexp.MustCompile(`(?P<Date>.{25}) \[(?P<Lock>.+)](?P<Fn>.*) (?P<Op>.*s) lock$`)
50+
51+
func (l *lockfinder) handleLine(line string) error {
52+
match := re.FindStringSubmatch(line)
53+
if len(match) == 0 {
54+
return nil
55+
}
56+
lock, fn, op := match[re.SubexpIndex("Lock")], match[re.SubexpIndex("Fn")], match[re.SubexpIndex("Op")]
57+
switch op {
58+
case "seeks":
59+
case "receives":
60+
l.m[lock] = fn
61+
case "releases":
62+
l.m[lock] = ""
63+
}
64+
return nil
65+
}
66+
67+
type Operation int
68+
69+
const (
70+
unknownOperation Operation = iota
71+
OperationGotLock
72+
OperationSeeksLock
73+
OperationUnlocks
74+
)
75+
76+
func (l *lockfinder) report() string {
77+
var buf strings.Builder
78+
fmt.Fprintf(&buf, "report\n")
79+
for lock, fn := range l.m {
80+
if fn != "" {
81+
fmt.Fprintf(&buf, "- %s is held by %s\n", lock, fn)
82+
}
83+
}
84+
for lock, fn := range l.m {
85+
if fn == "" {
86+
fmt.Fprintf(&buf, "- %s is not held\n", lock)
87+
}
88+
}
89+
return buf.String()
90+
}

cmd/messagestringer/main.go

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"go/ast"
6+
"go/parser"
7+
"go/token"
8+
"os"
9+
"path/filepath"
10+
"strings"
11+
)
12+
13+
var (
14+
file = flag.String("file", os.Getenv("GOFILE"), "the file to search for msg types")
15+
prefix = flag.String("prefix", "msg", "a prefix; types whose names have this prefix will be generated")
16+
)
17+
18+
func main() {
19+
flag.Parse()
20+
if err := run(); err != nil {
21+
panic(err)
22+
}
23+
}
24+
25+
func run() error {
26+
fset := token.NewFileSet()
27+
f, err := parser.ParseFile(fset, *file, nil, 0)
28+
if err != nil {
29+
return err
30+
}
31+
32+
var (
33+
packageName string
34+
ts []string
35+
)
36+
ast.Inspect(f, func(n ast.Node) bool {
37+
switch n := n.(type) {
38+
case *ast.File:
39+
packageName = n.Name.String()
40+
case *ast.TypeSpec:
41+
name := n.Name.String()
42+
if strings.HasPrefix(name, *prefix) {
43+
ts = append(ts, name)
44+
}
45+
}
46+
return true
47+
})
48+
49+
var b strings.Builder
50+
b.WriteString("package " + packageName + "\n\n")
51+
b.WriteString("import \"fmt\"\n\n")
52+
for _, t := range ts {
53+
b.WriteString("func (msg " + t + ") String() string {\n")
54+
b.WriteString("\treturn fmt.Sprintf(\"[" + t + " %#v]\", msg)\n")
55+
b.WriteString("}\n\n")
56+
}
57+
58+
outputName := strings.TrimSuffix(*file, filepath.Ext(*file))
59+
outputFilename := outputName + "_msgstrings.go"
60+
if err := os.WriteFile(outputFilename, []byte(b.String()), 0644); err != nil {
61+
return err
62+
}
63+
64+
return nil
65+
}

cmd/run/first.go

-33
This file was deleted.

cmd/run/first_test.go

-17
This file was deleted.

0 commit comments

Comments
 (0)