From bf699d3a79dbe160830d56cb8d13574b8efd766c Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Wed, 9 Aug 2023 17:25:49 +0200 Subject: [PATCH 1/2] Add test case for LineNumberOfLine() There's a bug in LineNumberOfLine, but the existing test coverage doesn't catch it, as the only test case for this was one where oldStart and newStart were the same for all hunks. Add a test case where newStart is different for one of the hunks; this demonstrates a bug, where all expected results from index 12 on are off by one. --- pkg/commands/patch/patch_test.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/pkg/commands/patch/patch_test.go b/pkg/commands/patch/patch_test.go index bc029da0d7f..57d17e7c9b8 100644 --- a/pkg/commands/patch/patch_test.go +++ b/pkg/commands/patch/patch_test.go @@ -67,6 +67,29 @@ index e48a11c..b2ab81b 100644 ... ` +const twoHunksWithMoreAdditionsThanRemovals = `diff --git a/filename b/filename +index bac359d75..6e5b89f36 100644 +--- a/filename ++++ b/filename +@@ -1,5 +1,6 @@ + apple +-grape ++orange ++kiwi + ... + ... + ... +@@ -8,6 +9,8 @@ grape + ... + ... + ... ++pear ++lemon + ... + ... + ... +` + const twoChangesInOneHunk = `diff --git a/filename b/filename index 9320895..6d79956 100644 --- a/filename @@ -572,6 +595,12 @@ func TestLineNumberOfLine(t *testing.T) { indexes: []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 1000}, expecteds: []int{1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 8, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 15, 15}, }, + { + testName: "twoHunksWithMoreAdditionsThanRemovals", + patchStr: twoHunksWithMoreAdditionsThanRemovals, + indexes: []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 1000}, + expecteds: []int{1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16}, + }, } for _, s := range scenarios { From 73b68927af5b64b675109fd7f5fc9e14daf857cc Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Wed, 9 Aug 2023 17:28:43 +0200 Subject: [PATCH 2/2] Fix bug in LineNumberOfLine This fixes a regression that was introduced in 73c7dc9c5d00. --- pkg/commands/patch/patch.go | 4 ++-- pkg/commands/patch/patch_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/commands/patch/patch.go b/pkg/commands/patch/patch.go index 5275fb613be..55dd8f80d54 100644 --- a/pkg/commands/patch/patch.go +++ b/pkg/commands/patch/patch.go @@ -97,12 +97,12 @@ func (self *Patch) LineNumberOfLine(idx int) int { idxInHunk := idx - hunkStartIdx if idxInHunk == 0 { - return hunk.oldStart + return hunk.newStart } lines := hunk.bodyLines[:idxInHunk-1] offset := nLinesWithKind(lines, []PatchLineKind{ADDITION, CONTEXT}) - return hunk.oldStart + offset + return hunk.newStart + offset } // Returns hunk index containing the line at the given patch line index diff --git a/pkg/commands/patch/patch_test.go b/pkg/commands/patch/patch_test.go index 57d17e7c9b8..e86c5f07a85 100644 --- a/pkg/commands/patch/patch_test.go +++ b/pkg/commands/patch/patch_test.go @@ -599,7 +599,7 @@ func TestLineNumberOfLine(t *testing.T) { testName: "twoHunksWithMoreAdditionsThanRemovals", patchStr: twoHunksWithMoreAdditionsThanRemovals, indexes: []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 1000}, - expecteds: []int{1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16}, + expecteds: []int{1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 9, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16}, }, }