git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] git-gui: Fix "Stage/Unstage Line" with one line of context.

From
Johannes Sixt <johannes.sixt@telecom.at>
Date
Jul 15, 2008, 21:11 UTC
Message-ID
<1216156261-9687-1-git-send-email-johannes.sixt@telecom.at>

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>
---
 lib/diff.tcl |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/lib/diff.tcl b/lib/diff.tcl
index 96ba949..ee7f391 100644
--- a/lib/diff.tcl
+++ b/lib/diff.tcl
@@ -423,6 +423,9 @@ proc apply_line {x y} {
 			# the line to stage/unstage
 			set ln [$ui_diff get $i_l $next_l]
 			set patch "$patch$ln"
+			if {$c1 eq {-}} {
+				set n [expr $n+1]
+			}
 		} elseif {$c1 ne {-} && $c1 ne {+}} {
 			# context line
 			set ln [$ui_diff get $i_l $next_l]
-- 
1.5.6.3.323.g1e58
Next: Johannes Sixt
Message 1 of 7 in “git-gui: Fix "Stage/Unstage Line" with one line of context.”
  1. 1/2 git-gui: Fix "Stage/Unstage Line" with one line of context.Johannes Sixt, Jul 15, 2008
  2. 2/2 git-gui: Allow "Stage Line" to stage adjacent changes independentlyJohannes Sixt, Jul 15, 2008
  3. Junio C HamanoJul 15, 2008
  4. Shawn O. PearceJul 16, 2008
  5. 2/2 git-gui: "Stage Line": Treat independent changes in adjacent lines betterJohannes Sixt, Jul 17, 2008
  6. Junio C HamanoJul 18, 2008
  7. Johannes SixtJul 16, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.