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 bc029da0d7f..e86c5f07a85 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, 9, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16}, + }, } for _, s := range scenarios {