[prev in list] [next in list] [prev in thread] [next in thread]
List: git
Subject: [PATCH] git gui: use apply --unidiff-zero when staging hunks
From: Clemens Buchacher <drizzd () aon ! at>
Date: 2008-08-30 16:56:00
Message-ID: 20080830165600.GB25370 () localhost
[Download RAW message or body]
git apply does not work correctly with zero-context patches. It does a
little better with --unidiff-zero.
---
This appears to fix staging hunks with zero context lines in the majority of
cases. Staging individual lines still is a problem frequently.
In any case, it's easy enough to break zero-context diff & patch like this:
echo a > victim
git add victim
echo b >> victim
git diff -U0 | git apply --cached --unidiff-zero
git diff
So before delving into this problem to deeply, I'd like to find out who
needs fixing exactly. Is there documentation defining how zero-context git
diff output should look like? Or is git apply the culprit in the bug above?
Or do we even want to support applying zero-context patches? If not, we
should detect and fail such attempts.
Clemens
git-gui/lib/diff.tcl | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl
index 52b79e4..78c1b56 100644
--- a/git-gui/lib/diff.tcl
+++ b/git-gui/lib/diff.tcl
@@ -302,12 +302,15 @@ proc read_diff {fd scroll_pos} {
proc apply_hunk {x y} {
global current_diff_path current_diff_header current_diff_side
- global ui_diff ui_index file_states
+ global ui_diff ui_index file_states repo_config
if {$current_diff_path eq {} || $current_diff_header eq {}} return
if {![lock_index apply_hunk]} return
set apply_cmd {apply --cached --whitespace=nowarn}
+ if {$repo_config(gui.diffcontext) eq 0} {
+ lappend apply_cmd --unidiff-zero
+ }
set mi [lindex $file_states($current_diff_path) 0]
if {$current_diff_side eq $ui_index} {
set failed_msg [mc "Failed to unstage selected hunk."]
@@ -375,12 +378,15 @@ proc apply_hunk {x y} {
proc apply_line {x y} {
global current_diff_path current_diff_header current_diff_side
- global ui_diff ui_index file_states
+ global ui_diff ui_index file_states repo_config
if {$current_diff_path eq {} || $current_diff_header eq {}} return
if {![lock_index apply_hunk]} return
set apply_cmd {apply --cached --whitespace=nowarn}
+ if {$repo_config(gui.diffcontext) eq 0} {
+ lappend apply_cmd --unidiff-zero
+ }
set mi [lindex $file_states($current_diff_path) 0]
if {$current_diff_side eq $ui_index} {
set failed_msg [mc "Failed to unstage selected line."]
--
1.6.0
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic