Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Fargher <proglottis@gmail.com>2021-09-15 01:05:00 +0300
committerJames Fargher <proglottis@gmail.com>2021-09-15 01:05:00 +0300
commit6ee4f0a09c4fc4a5df334a5033f19986272373a1 (patch)
tree3ba4a55e353c5d3c8747ddc29da78f6fe0f2a231
parent125aa5ddeb59977b974a13cc460663209c6bd2f4 (diff)
parent03418a05665e904b1803de7c715929f4fc36cf38 (diff)
Merge branch 'fix-diff' into 'master'
Fix diff file disappear See merge request gitlab-org/gitaly!3761
-rw-r--r--internal/gitaly/diff/diff.go3
-rw-r--r--internal/gitaly/diff/diff_test.go108
2 files changed, 110 insertions, 1 deletions
diff --git a/internal/gitaly/diff/diff.go b/internal/gitaly/diff/diff.go
index a366948ad..38f763728 100644
--- a/internal/gitaly/diff/diff.go
+++ b/internal/gitaly/diff/diff.go
@@ -144,7 +144,8 @@ func (parser *Parser) Parse() bool {
// We cannot use bufio.Scanner because the line may be very long.
line, err := parser.patchReader.Peek(10)
if err == io.EOF {
- parser.finished = true
+ // If the last diff has an empty patch (e.g. --ignore-space-change),
+ // patchReader will read EOF, but Parser not finished.
currentPatchDone = true
} else if err != nil {
parser.err = fmt.Errorf("peek diff line: %v", err)
diff --git a/internal/gitaly/diff/diff_test.go b/internal/gitaly/diff/diff_test.go
index 3ddf426d9..fb8d8e754 100644
--- a/internal/gitaly/diff/diff_test.go
+++ b/internal/gitaly/diff/diff_test.go
@@ -72,6 +72,114 @@ index 0000000000000000000000000000000000000000..3be11c69355948412925fa5e073d76d5
require.Equal(t, expectedDiffs, diffs)
}
+func TestDiffParserWithIgnoreWhitespaceChangeAndFirstPatchEmpty(t *testing.T) {
+ rawDiff := `:100644 100644 3be11c69355948412925fa5e073d76d58ff3afd2 2b3087b18e944130456ac0a6857e36b70cd33c79 M file-00.txt
+:100644 100644 3be11c69355948412925fa5e073d76d58ff3afd2 20c4507e1acc7c7ddfd1fc995cfaf4c80a7c2d42 M file-01.txt
+
+diff --git a/file-01.txt b/file-01.txt
+index 3be11c69355948412925fa5e073d76d58ff3afd2..20c4507e1acc7c7ddfd1fc995cfaf4c80a7c2d42 100644
+--- a/file-01.txt
++++ b/file-01.txt
+@@ -1 +1,2 @@
+ Lorem ipsum
++Lorem ipsum
+`
+ limits := Limits{
+ EnforceLimits: true,
+ SafeMaxFiles: 3,
+ SafeMaxBytes: 200,
+ SafeMaxLines: 200,
+ MaxFiles: 5,
+ MaxBytes: 10000000,
+ MaxLines: 10000000,
+ MaxPatchBytes: 100000,
+ CollapseDiffs: false,
+ }
+
+ diffs := getDiffs(t, rawDiff, limits)
+ expectedDiffs := []*Diff{
+ {
+ OldMode: 0o100644,
+ NewMode: 0o100644,
+ FromID: "3be11c69355948412925fa5e073d76d58ff3afd2",
+ ToID: "2b3087b18e944130456ac0a6857e36b70cd33c79",
+ FromPath: []byte("file-00.txt"),
+ ToPath: []byte("file-00.txt"),
+ Status: 'M',
+ Collapsed: false,
+ lineCount: 0,
+ },
+ {
+ OldMode: 0o100644,
+ NewMode: 0o100644,
+ FromID: "3be11c69355948412925fa5e073d76d58ff3afd2",
+ ToID: "20c4507e1acc7c7ddfd1fc995cfaf4c80a7c2d42",
+ FromPath: []byte("file-01.txt"),
+ ToPath: []byte("file-01.txt"),
+ Status: 'M',
+ Collapsed: false,
+ Patch: []byte("@@ -1 +1,2 @@\n Lorem ipsum\n+Lorem ipsum\n"),
+ lineCount: 2,
+ },
+ }
+
+ require.Equal(t, expectedDiffs, diffs)
+}
+
+func TestDiffParserWithIgnoreWhitespaceChangeAndLastPatchEmpty(t *testing.T) {
+ rawDiff := `:100644 100644 3be11c69355948412925fa5e073d76d58ff3afd2 20c4507e1acc7c7ddfd1fc995cfaf4c80a7c2d42 M file-00.txt
+:100644 100644 3be11c69355948412925fa5e073d76d58ff3afd2 2b3087b18e944130456ac0a6857e36b70cd33c79 M file-01.txt
+
+diff --git a/file-00.txt b/file-00.txt
+index 3be11c69355948412925fa5e073d76d58ff3afd2..20c4507e1acc7c7ddfd1fc995cfaf4c80a7c2d42 100644
+--- a/file-00.txt
++++ b/file-00.txt
+@@ -1 +1,2 @@
+ Lorem ipsum
++Lorem ipsum
+`
+ limits := Limits{
+ EnforceLimits: true,
+ SafeMaxFiles: 3,
+ SafeMaxBytes: 200,
+ SafeMaxLines: 200,
+ MaxFiles: 5,
+ MaxBytes: 10000000,
+ MaxLines: 10000000,
+ MaxPatchBytes: 100000,
+ CollapseDiffs: false,
+ }
+
+ diffs := getDiffs(t, rawDiff, limits)
+ expectedDiffs := []*Diff{
+ {
+ OldMode: 0o100644,
+ NewMode: 0o100644,
+ FromID: "3be11c69355948412925fa5e073d76d58ff3afd2",
+ ToID: "20c4507e1acc7c7ddfd1fc995cfaf4c80a7c2d42",
+ FromPath: []byte("file-00.txt"),
+ ToPath: []byte("file-00.txt"),
+ Status: 'M',
+ Collapsed: false,
+ Patch: []byte("@@ -1 +1,2 @@\n Lorem ipsum\n+Lorem ipsum\n"),
+ lineCount: 2,
+ },
+ {
+ OldMode: 0o100644,
+ NewMode: 0o100644,
+ FromID: "3be11c69355948412925fa5e073d76d58ff3afd2",
+ ToID: "2b3087b18e944130456ac0a6857e36b70cd33c79",
+ FromPath: []byte("file-01.txt"),
+ ToPath: []byte("file-01.txt"),
+ Status: 'M',
+ Collapsed: false,
+ lineCount: 0,
+ },
+ }
+
+ require.Equal(t, expectedDiffs, diffs)
+}
+
func TestDiffParserWithWordDiff(t *testing.T) {
rawDiff := `:000000 100644 0000000000000000000000000000000000000000 4cc7061661b8f52891bc1b39feb4d856b21a1067 A big.txt