Skip to content

Commit 4849219

Browse files
committed
cmd/pkg-diff-example: support use as an external git diff tool
this makes it easier to quickly use it on real world diffs. sample usage: $ GIT_EXTERNAL_DIFF="`which pkg-diff-example` -color" git diff
1 parent 0bf1797 commit 4849219

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

cmd/pkg-diff-example/main.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package main
55
import (
66
"flag"
77
"fmt"
8+
"io/ioutil"
89
"log"
910
"os"
1011

@@ -33,18 +34,37 @@ func main() {
3334

3435
flag.Usage = usage
3536
flag.Parse()
36-
if len(flag.Args()) != 2 {
37+
38+
var aName, bName string
39+
var a, b interface{}
40+
switch flag.NArg() {
41+
case 2:
42+
// A human has invoked us.
43+
aName, bName = flag.Arg(0), flag.Arg(1)
44+
case 7, 9:
45+
// We are a git external diff tool.
46+
// We have been passed the following arguments:
47+
// path old-file old-hex old-mode new-file new-hex new-mode [new-path similarity-metrics]
48+
aName = "a/" + flag.Arg(0)
49+
if flag.NArg() == 7 {
50+
bName = "b/" + flag.Arg(0)
51+
} else {
52+
bName = "b/" + flag.Arg(7)
53+
}
54+
var err error
55+
a, err = ioutil.ReadFile(flag.Arg(1))
56+
check(err)
57+
b, err = ioutil.ReadFile(flag.Arg(4))
58+
check(err)
59+
default:
3760
flag.Usage()
3861
}
3962

40-
aName := flag.Arg(0)
41-
bName := flag.Arg(1)
42-
4363
var opts []write.Option
4464
if *color {
4565
opts = append(opts, write.TerminalColor())
4666
}
4767

48-
err := diff.Text(aName, bName, nil, nil, os.Stdout, opts...)
68+
err := diff.Text(aName, bName, a, b, os.Stdout, opts...)
4969
check(err)
5070
}

0 commit comments

Comments
 (0)