Skip to content

Commit 99814f6

Browse files
committed
add go-diff diagnostic program
1 parent 86544b8 commit 99814f6

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

cmd/go-diff/go-diff.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"fmt"
6+
"io"
7+
"log"
8+
"os"
9+
10+
"sourcegraph.com/sourcegraph/go-diff/diff"
11+
)
12+
13+
// A diagnostic program to aid in debugging diff parsing or printing
14+
// errors.
15+
16+
const stdin = "<stdin>"
17+
18+
var (
19+
diffPath = flag.String("f", stdin, "filename of diff (default: stdin)")
20+
fileIdx = flag.Int("i", -1, "if >= 0, only print and report errors from the i'th file (0-indexed)")
21+
)
22+
23+
func main() {
24+
log.SetFlags(0)
25+
flag.Parse()
26+
27+
var diffFile *os.File
28+
if *diffPath == stdin {
29+
diffFile = os.Stdin
30+
} else {
31+
var err error
32+
diffFile, err = os.Open(*diffPath)
33+
if err != nil {
34+
log.Fatal(err)
35+
}
36+
}
37+
defer diffFile.Close()
38+
39+
r := diff.NewMultiFileDiffReader(diffFile)
40+
for i := 0; ; i++ {
41+
report := (*fileIdx == -1) || i == *fileIdx // true if -i==-1 or if this is the i'th file
42+
43+
label := fmt.Sprintf("file(%d)", i)
44+
fdiff, err := r.ReadFile()
45+
if fdiff != nil {
46+
label = fmt.Sprintf("orig(%s) new(%s)", fdiff.OrigName, fdiff.NewName)
47+
}
48+
if err == io.EOF {
49+
break
50+
}
51+
if err != nil {
52+
if report {
53+
log.Fatalf("err read %s: %s", label, err)
54+
} else {
55+
continue
56+
}
57+
}
58+
59+
if report {
60+
log.Printf("ok read: %s", label)
61+
}
62+
63+
out, err := diff.PrintFileDiff(fdiff)
64+
if err != nil {
65+
if report {
66+
log.Fatalf("err print %s: %s", label, err)
67+
} else {
68+
continue
69+
}
70+
}
71+
if report {
72+
if _, err := os.Stdout.Write(out); err != nil {
73+
log.Fatal(err)
74+
}
75+
}
76+
}
77+
}

0 commit comments

Comments
 (0)