diff options
author | Mikhail Fesenko <proggga@gmail.com> | 2019-10-28 21:51:00 +0000 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2019-10-28 23:59:10 +0000 |
commit | fd1e60f6e3bd42075e335a90ad36719ffed0eb1a (patch) | |
tree | 1f7534f05f914e138735e895b396d5e7de63c353 /src/cmd/fix | |
parent | 449b6abbacc464443a7faf166bf4db3df3e0f8da (diff) | |
download | go-fd1e60f6e3bd42075e335a90ad36719ffed0eb1a.tar.gz go-fd1e60f6e3bd42075e335a90ad36719ffed0eb1a.zip |
cmd/fix, cmd/go, cmd/gofmt: refactor common code into new internal diff package
Change-Id: Idac8473d1752059bf2f617fd7a781000ee2c3af4
GitHub-Last-Rev: 02a3aa1a3241d3ed4422518f1c954cd54bbe858e
GitHub-Pull-Request: golang/go#35141
Reviewed-on: https://go-review.googlesource.com/c/go/+/203218
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/cmd/fix')
-rw-r--r-- | src/cmd/fix/main.go | 49 | ||||
-rw-r--r-- | src/cmd/fix/main_test.go | 4 |
2 files changed, 6 insertions, 47 deletions
diff --git a/src/cmd/fix/main.go b/src/cmd/fix/main.go index f54a5e0d96..80b3c76350 100644 --- a/src/cmd/fix/main.go +++ b/src/cmd/fix/main.go @@ -15,11 +15,11 @@ import ( "go/token" "io/ioutil" "os" - "os/exec" "path/filepath" - "runtime" "sort" "strings" + + "cmd/internal/diff" ) var ( @@ -186,7 +186,7 @@ func processFile(filename string, useStdin bool) error { } if *doDiff { - data, err := diff(src, newSrc) + data, err := diff.Diff("go-fix", src, newSrc) if err != nil { return fmt.Errorf("computing diff: %s", err) } @@ -237,46 +237,3 @@ func isGoFile(f os.FileInfo) bool { name := f.Name() return !f.IsDir() && !strings.HasPrefix(name, ".") && strings.HasSuffix(name, ".go") } - -func writeTempFile(dir, prefix string, data []byte) (string, error) { - file, err := ioutil.TempFile(dir, prefix) - if err != nil { - return "", err - } - _, err = file.Write(data) - if err1 := file.Close(); err == nil { - err = err1 - } - if err != nil { - os.Remove(file.Name()) - return "", err - } - return file.Name(), nil -} - -func diff(b1, b2 []byte) (data []byte, err error) { - f1, err := writeTempFile("", "go-fix", b1) - if err != nil { - return - } - defer os.Remove(f1) - - f2, err := writeTempFile("", "go-fix", b2) - if err != nil { - return - } - defer os.Remove(f2) - - cmd := "diff" - if runtime.GOOS == "plan9" { - cmd = "/bin/ape/diff" - } - - data, err = exec.Command(cmd, "-u", f1, f2).CombinedOutput() - if len(data) > 0 { - // diff exits with a non-zero status when the files don't match. - // Ignore that failure as long as we get output. - err = nil - } - return -} diff --git a/src/cmd/fix/main_test.go b/src/cmd/fix/main_test.go index 8868140ade..ee74f24c6e 100644 --- a/src/cmd/fix/main_test.go +++ b/src/cmd/fix/main_test.go @@ -9,6 +9,8 @@ import ( "go/parser" "strings" "testing" + + "cmd/internal/diff" ) type testCase struct { @@ -123,7 +125,7 @@ func TestRewrite(t *testing.T) { } func tdiff(t *testing.T, a, b string) { - data, err := diff([]byte(a), []byte(b)) + data, err := diff.Diff("go-fix-test", []byte(a), []byte(b)) if err != nil { t.Error(err) return |