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

[PATCH] git-gui: accommodate for intent-to-add files

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Aug 12, 2020, 15:06 UTC
Message-ID
<pull.699.git.1597244777943.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

As of Git v2.28.0, the diff for files staged via `git add -N` marks them as new files. Git GUI was ill-prepared for that, and this patch teaches Git GUI about them.

Please note that this will not even fix things with v2.28.0, as the `rp/apply-cached-with-i-t-a` patches are required on Git's side, too.

This fixes https://github.com/git-for-windows/git/issues/2779
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
    git-gui: accommodate for intent-to-add files
    
    This fixes the intent-to-add bug reported in 
    https://github.com/git-for-windows/git/issues/2779: after a file was
    staged with git add -N, staging hunks/lines would fail silently.
    
    On its own, this patch is not enough, as it requires the patches
    provided in rp/apply-cached-with-i-t-a to be applied on Git's side.
    
    Please note that this patch might need a bit more help, as I do not
    really know whether showing "new file mode 100644" in the diff view is
    desirable, or whether we should somehow try to retain the
    "intent-to-add" state so that unstaging all hunks would return the file
    to "intent-to-add" state.
    
    Thoughts?
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-699%2Fdscho%2Fgit-gui-stage-ita-hunks-and-lines-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-699/dscho/git-gui-stage-ita-hunks-and-lines-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/699
 git-gui.sh   |  2 ++
 lib/diff.tcl | 12 ++++++++----
 2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/git-gui.sh b/git-gui.sh
index 49bd86e635..e08cb17395 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -2080,6 +2080,7 @@ set all_icons(U$ui_index)   file_merge
 set all_icons(T$ui_index)   file_statechange
 
 set all_icons(_$ui_workdir) file_plain
+set all_icons(A$ui_workdir) file_plain
 set all_icons(M$ui_workdir) file_mod
 set all_icons(D$ui_workdir) file_question
 set all_icons(U$ui_workdir) file_merge
@@ -2106,6 +2107,7 @@ foreach i {
 		{A_ {mc "Staged for commit"}}
 		{AM {mc "Portions staged for commit"}}
 		{AD {mc "Staged for commit, missing"}}
+		{AA {mc "Intended to be added"}}
 
 		{_D {mc "Missing"}}
 		{D_ {mc "Staged for removal"}}
diff --git a/lib/diff.tcl b/lib/diff.tcl
index 871ad488c2..36d3715f7b 100644
--- a/lib/diff.tcl
+++ b/lib/diff.tcl
@@ -582,7 +582,8 @@ proc apply_or_revert_hunk {x y revert} {
 	if {$current_diff_side eq $ui_index} {
 		set failed_msg [mc "Failed to unstage selected hunk."]
 		lappend apply_cmd --reverse --cached
-		if {[string index $mi 0] ne {M}} {
+		set file_state [string index $mi 0]
+		if {$file_state ne {M} && $file_state ne {A}} {
 			unlock_index
 			return
 		}
@@ -595,7 +596,8 @@ proc apply_or_revert_hunk {x y revert} {
 			lappend apply_cmd --cached
 		}
 
-		if {[string index $mi 1] ne {M}} {
+		set file_state [string index $mi 1]
+		if {$file_state ne {M} && $file_state ne {A}} {
 			unlock_index
 			return
 		}
@@ -687,7 +689,8 @@ proc apply_or_revert_range_or_line {x y revert} {
 		set failed_msg [mc "Failed to unstage selected line."]
 		set to_context {+}
 		lappend apply_cmd --reverse --cached
-		if {[string index $mi 0] ne {M}} {
+		set file_state [string index $mi 0]
+		if {$file_state ne {M} && $file_state ne {A}} {
 			unlock_index
 			return
 		}
@@ -702,7 +705,8 @@ proc apply_or_revert_range_or_line {x y revert} {
 			lappend apply_cmd --cached
 		}
 
-		if {[string index $mi 1] ne {M}} {
+		set file_state [string index $mi 1]
+		if {$file_state ne {M} && $file_state ne {A}} {
 			unlock_index
 			return
 		}

base-commit: 469725c1a3d44f7e1475f1d37cd13e0824d4ea41
-- 
gitgitgadget
Next: Pratyush Yadav
Message 1 of 7 in “git-gui: accommodate for intent-to-add files”
  1. git-gui: accommodate for intent-to-add filesJohannes Schindelin via GitGitGadget, Aug 12, 2020
  2. Pratyush YadavAug 26, 2020
  3. Johannes SchindelinAug 26, 2020
  4. Pratyush YadavAug 26, 2020
  5. Johannes SchindelinOct 9, 2020
  6. Pratyush YadavOct 9, 2020
  7. Johannes SchindelinOct 9, 2020

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.