Skip to content

Commit d1e74e0

Browse files
authored
Merge pull request #57 from uoli/fix-filemode-change
add support for file mode changes only
2 parents 5bc20c4 + ae1c453 commit d1e74e0

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

diff/diff_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,21 @@ func TestParseMultiFileDiffHeaders(t *testing.T) {
338338
},
339339
},
340340
},
341+
{
342+
filename: "sample_multi_file_filemode_change.diff",
343+
wantDiffs: []*FileDiff{
344+
{
345+
OrigName: "a/sample.sh",
346+
NewName: "b/sample.sh",
347+
Extended: []string{"diff --git a/sample.sh b/sample.sh", "old mode 100755", "new mode 100644"},
348+
},
349+
{
350+
OrigName: "a/sample2.sh",
351+
NewName: "b/sample2.sh",
352+
Extended: []string{"diff --git a/sample2.sh b/sample2.sh", "old mode 100755", "new mode 100644"},
353+
},
354+
},
355+
},
341356
{
342357
filename: "sample_multi_file_rename.diff",
343358
wantDiffs: []*FileDiff{

diff/parse.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,19 @@ func handleEmpty(fd *FileDiff) (wasEmpty bool) {
363363
return false
364364
}
365365
switch {
366+
case (lineCount == 3 || lineCount == 4 && strings.HasPrefix(fd.Extended[3], "Binary files ") || lineCount > 4 && strings.HasPrefix(fd.Extended[3], "GIT binary patch")) &&
367+
strings.HasPrefix(fd.Extended[1], "old mode ") && strings.HasPrefix(fd.Extended[2], "new mode "):
368+
369+
names := strings.SplitN(fd.Extended[0][len("diff --git "):], " ", 2)
370+
fd.OrigName, err = strconv.Unquote(names[0])
371+
if err != nil {
372+
fd.OrigName = names[0]
373+
}
374+
fd.NewName, err = strconv.Unquote(names[1])
375+
if err != nil {
376+
fd.NewName = names[1]
377+
}
378+
return true
366379
case (lineCount == 3 || lineCount == 4 && strings.HasPrefix(fd.Extended[3], "Binary files ") || lineCount > 4 && strings.HasPrefix(fd.Extended[3], "GIT binary patch")) &&
367380
strings.HasPrefix(fd.Extended[1], "new file mode "):
368381

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
diff --git a/sample.sh b/sample.sh
2+
old mode 100755
3+
new mode 100644
4+
diff --git a/sample2.sh b/sample2.sh
5+
old mode 100755
6+
new mode 100644

0 commit comments

Comments
 (0)