diff --git a/diff/reverse.go b/diff/reverse.go index 0c4d1b6..f492731 100644 --- a/diff/reverse.go +++ b/diff/reverse.go @@ -26,6 +26,10 @@ func ReverseFileDiff(fd *FileDiff) (*FileDiff, error) { NewTime: fd.OrigTime, Extended: extended, } + // "Only in" lines read the same in both directions. + if fd.NewName == "" { + reverse.OrigName, reverse.NewName = fd.OrigName, fd.NewName + } for _, hunk := range fd.Hunks { invHunk, err := reverseHunk(hunk) if err != nil { diff --git a/diff/reverse_test.go b/diff/reverse_test.go index d37c1aa..9ec2da6 100644 --- a/diff/reverse_test.go +++ b/diff/reverse_test.go @@ -116,6 +116,10 @@ func TestReverseMultiFileDiff(t *testing.T) { inputFile: "sample_multi_file.diff", wantFile: "sample_multi_file.reversed", }, + { + inputFile: "sample_contains_added_deleted_files.diff", + wantFile: "sample_contains_added_deleted_files.reversed", + }, } for _, test := range tests { inputData, err := os.ReadFile(filepath.Join("testdata", test.inputFile)) diff --git a/diff/testdata/sample_contains_added_deleted_files.reversed b/diff/testdata/sample_contains_added_deleted_files.reversed new file mode 100644 index 0000000..b27c539 --- /dev/null +++ b/diff/testdata/sample_contains_added_deleted_files.reversed @@ -0,0 +1,11 @@ +diff -u source_a/file_1.txt source_b/file_1.txt +--- source_b/file_1.txt ++++ source_a/file_1.txt +@@ -3,4 +2,3 @@ + To be, or not to be, that is the question: +-The slings and arrows of outrageous fortune, +-Or to take arms against a sea of troubles ++Whether 'tis nobler in the mind to suffer + And by opposing end them. To die—to sleep, +Only in source_a: file_2.txt +Only in source_b: file_3.txt