From dca695bd68fb154e9d0350c8bef034db29484752 Mon Sep 17 00:00:00 2001 From: David Colburn Date: Mon, 7 Mar 2022 16:26:52 -0600 Subject: [PATCH] deadlock package (#489) * deadlock package * clean up pipe --- magefile.go | 93 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 85 insertions(+), 8 deletions(-) diff --git a/magefile.go b/magefile.go index 2f91b4505..c7e761a5a 100644 --- a/magefile.go +++ b/magefile.go @@ -97,6 +97,44 @@ func BuildLinux() error { return nil } +func Deadlock() error { + if err := installTool("golang.org/x/tools/cmd/goimports", "latest", false); err != nil { + return err + } + if err := run("go get github.com/sasha-s/go-deadlock"); err != nil { + return err + } + if err := pipe("grep -rl sync.Mutex ./pkg", "xargs sed -i -e s/sync.Mutex/deadlock.Mutex/g"); err != nil { + return err + } + if err := pipe("grep -rl sync.RWMutex ./pkg", "xargs sed -i -e s/sync.RWMutex/deadlock.RWMutex/g"); err != nil { + return err + } + if err := pipe("grep -rl deadlock.Mutex\\|deadlock.RWMutex ./pkg", "xargs goimports -w"); err != nil { + return err + } + if err := run("go mod tidy"); err != nil { + return err + } + return nil +} + +func Sync() error { + if err := pipe("grep -rl deadlock.Mutex ./pkg", "xargs sed -i -e s/deadlock.Mutex/sync.Mutex/g"); err != nil { + return err + } + if err := pipe("grep -rl deadlock.RWMutex ./pkg", "xargs sed -i -e s/deadlock.RWMutex/sync.RWMutex/g"); err != nil { + return err + } + if err := pipe("grep -rl sync.Mutex\\|sync.RWMutex ./pkg", "xargs goimports -w"); err != nil { + return err + } + if err := run("go mod tidy"); err != nil { + return err + } + return nil +} + // builds and publish snapshot docker image func PublishDocker() error { // don't publish snapshot versions as latest or minor version @@ -127,10 +165,7 @@ func Test() error { // run all tests including integration func TestAll() error { mg.Deps(generateWire, macULimit) - // "-v", "-race", - cmd := exec.Command("go", "test", "./...", "-count=1", "-timeout=4m", "-v") - connectStd(cmd) - return cmd.Run() + return run("go test ./... -count=1 -timeout=4m -v") } // cleans up builds @@ -145,10 +180,7 @@ func Generate() error { mg.Deps(installDeps, generateWire) fmt.Println("generating...") - - cmd := exec.Command("go", "generate", "./...") - connectStd(cmd) - return cmd.Run() + return run("go generate ./...") } // code generation for wiring @@ -353,3 +385,48 @@ func (c *Checksummer) computeChecksum() error { return nil } + +func run(commands ...string) error { + for _, command := range commands { + args := strings.Split(command, " ") + cmd := exec.Command(args[0], args[1:]...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + return err + } + } + return nil +} + +func pipe(first, second string) error { + a1 := strings.Split(first, " ") + c1 := exec.Command(a1[0], a1[1:]...) + + c1.Stderr = os.Stderr + p, err := c1.StdoutPipe() + if err != nil { + return err + } + + a2 := strings.Split(second, " ") + c2 := exec.Command(a2[0], a2[1:]...) + + c2.Stdin = p + c2.Stdout = os.Stdout + c2.Stderr = os.Stderr + + if err = c1.Start(); err != nil { + return err + } + if err = c2.Start(); err != nil { + return err + } + if err = c1.Wait(); err != nil { + return err + } + if err = c2.Wait(); err != nil { + return err + } + return nil +}