Skip to content

Commit dee78e5

Browse files
authored
Merge pull request #29 from crsdrw/win
Handle diffs on windows
2 parents 119ab63 + ea34aaf commit dee78e5

File tree

4 files changed

+143
-3
lines changed

4 files changed

+143
-3
lines changed

diff/diff_test.go

+38
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,44 @@ func TestParseMultiFileDiffHeaders(t *testing.T) {
375375
},
376376
},
377377
},
378+
{
379+
filename: "sample_multi_file_new_win.diff",
380+
wantDiffs: []*FileDiff{
381+
{
382+
OrigName: "/dev/null",
383+
OrigTime: nil,
384+
NewName: "b/_vendor/go/build/syslist_test.go",
385+
NewTime: nil,
386+
Extended: []string{
387+
"diff --git a/_vendor/go/build/syslist_test.go b/_vendor/go/build/syslist_test.go",
388+
"new file mode 100644",
389+
"index 0000000..3be2928",
390+
},
391+
},
392+
{
393+
OrigName: "/dev/null",
394+
OrigTime: nil,
395+
NewName: "b/_vendor/go/build/testdata/empty/dummy",
396+
NewTime: nil,
397+
Extended: []string{
398+
"diff --git a/_vendor/go/build/testdata/empty/dummy b/_vendor/go/build/testdata/empty/dummy",
399+
"new file mode 100644",
400+
"index 0000000..e69de29",
401+
},
402+
},
403+
{
404+
OrigName: "/dev/null",
405+
OrigTime: nil,
406+
NewName: "b/_vendor/go/build/testdata/multi/file.go",
407+
NewTime: nil,
408+
Extended: []string{
409+
"diff --git a/_vendor/go/build/testdata/multi/file.go b/_vendor/go/build/testdata/multi/file.go",
410+
"new file mode 100644",
411+
"index 0000000..ee946eb",
412+
},
413+
},
414+
},
415+
},
378416
}
379417
for _, test := range tests {
380418
diffData, err := ioutil.ReadFile(filepath.Join("testdata", test.filename))

diff/reader_util.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package diff
22

33
import (
44
"bufio"
5-
"bytes"
65
"io"
76
)
87

@@ -25,6 +24,14 @@ func readLine(r *bufio.Reader) ([]byte, error) {
2524
} else if err != nil {
2625
return nil, err
2726
}
28-
line := bytes.TrimSuffix(line_, []byte{'\n'})
29-
return line, nil
27+
line := line_[0 : len(line_)-1]
28+
return dropCR(line), nil
29+
}
30+
31+
// dropCR drops a terminal \r from the data.
32+
func dropCR(data []byte) []byte {
33+
if len(data) > 0 && data[len(data)-1] == '\r' {
34+
return data[0 : len(data)-1]
35+
}
36+
return data
3037
}

diff/reader_util_test.go

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package diff
2+
3+
import (
4+
"bufio"
5+
"io"
6+
"reflect"
7+
"strings"
8+
"testing"
9+
)
10+
11+
func TestReadLine(t *testing.T) {
12+
tests := []struct {
13+
name string
14+
input string
15+
want []string
16+
}{
17+
{
18+
name: "empty",
19+
input: "",
20+
want: []string{},
21+
},
22+
{
23+
name: "single_line",
24+
input: "@@ -0,0 +1,62 @@",
25+
want: []string{"@@ -0,0 +1,62 @@"},
26+
},
27+
{
28+
name: "single_lf_terminated_line",
29+
input: "@@ -0,0 +1,62 @@\n",
30+
want: []string{"@@ -0,0 +1,62 @@"},
31+
},
32+
{
33+
name: "single_crlf_terminated_line",
34+
input: "@@ -0,0 +1,62 @@\r\n",
35+
want: []string{"@@ -0,0 +1,62 @@"},
36+
},
37+
{
38+
name: "multi_line",
39+
input: `diff --git a/test.go b/test.go
40+
new file mode 100644
41+
index 0000000..3be2928`,
42+
want: []string{
43+
"diff --git a/test.go b/test.go",
44+
"new file mode 100644",
45+
"index 0000000..3be2928",
46+
},
47+
},
48+
}
49+
for _, test := range tests {
50+
t.Run(test.name, func(t *testing.T) {
51+
in := bufio.NewReader(strings.NewReader(test.input))
52+
out := []string{}
53+
for {
54+
l, err := readLine(in)
55+
if err == io.EOF {
56+
break
57+
}
58+
if err != nil {
59+
t.Fatal(err)
60+
}
61+
out = append(out, string(l))
62+
}
63+
if !reflect.DeepEqual(test.want, out) {
64+
t.Errorf("read lines not equal: want %v, got %v", test.want, out)
65+
}
66+
})
67+
}
68+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
diff --git a/_vendor/go/build/syslist_test.go b/_vendor/go/build/syslist_test.go
2+
new file mode 100644
3+
index 0000000..3be2928
4+
--- /dev/null
5+
+++ b/_vendor/go/build/syslist_test.go
6+
@@ -0,0 +1,62 @@
7+
+func TestGoodOSArch(t *testing.T) {
8+
+ for _, test := range tests {
9+
+ if Default.goodOSArchFile(test.name, make(map[string]bool)) != test.result {
10+
+ t.Fatalf("goodOSArchFile(%q) != %v", test.name, test.result)
11+
+ }
12+
+ }
13+
+}
14+
diff --git a/_vendor/go/build/testdata/empty/dummy b/_vendor/go/build/testdata/empty/dummy
15+
new file mode 100644
16+
index 0000000..e69de29
17+
diff --git a/_vendor/go/build/testdata/multi/file.go b/_vendor/go/build/testdata/multi/file.go
18+
new file mode 100644
19+
index 0000000..ee946eb
20+
--- /dev/null
21+
+++ b/_vendor/go/build/testdata/multi/file.go
22+
@@ -0,0 +1,5 @@
23+
+// Test data - not compiled.
24+
+
25+
+package main
26+
+
27+
+func main() {}

0 commit comments

Comments
 (0)