Code

git-gui: Fix "Stage/Unstage Line" with one line of context.
authorJohannes Sixt <johannes.sixt@telecom.at>
Tue, 15 Jul 2008 21:11:00 +0000 (23:11 +0200)
committerShawn O. Pearce <spearce@spearce.org>
Sat, 26 Jul 2008 23:43:08 +0000 (16:43 -0700)
commitfa6b5b3944b74f2ad2430f3dfec517f8f70a6663
tree0312dc18b9c15e9e3d00cd9f27d306d0ad822c26
parent7838d3fb41ed7d738e2cbdf8e4f40f0367f4f46f
git-gui: Fix "Stage/Unstage Line" with one line of context.

To "Stage/Unstage Line" we construct a patch that contains exactly one
change (either addition or removal); the hunk header was forged by counting
the old side and adjusting the count by +/-1 for the new side. But when we
counted the context we never counted the changed line itself. If the hunk
had only one removal line and one line of context, like this:

    @@ -1,3 +1,2 @@
     context 1
    -removal
     context 2

We had constructed this patch:

    @@ -1,2 +1,1 @@
     context 1
    -removal
     context 2

which does not apply because git apply deduces that it must apply at the
end of the file. ("context 2" is considered garbage and ignored.) The fix
is that removal lines must be counted towards the context of the old side.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
lib/diff.tcl