Re: [RFC PATCH (GIT-GUI/CORE BUG)] git-gui: Avoid an infinite rescan loop in handle_empty_diff.
- From
Keith Cascio <keith@cs.ucla.edu>
- Date
- Jan 24, 2009, 01:46 UTC
- Message-ID
- <alpine.GSO.2.00.0901231743360.11562@kiwi.cs.ucla.edu>
- In-Reply-To
- <200901240052.58259.angavrilov@gmail.com>
Teach git-gui to check diff's exit code in order to know whether a file actually changed or not.
Signed-off-by: Keith Cascio <keith@cs.ucla.edu>
---
Alexander,
I encountered the same problem and I tried a different way
to prevent it. Could you please try this alternative patch
and see if it works in your setup? If so, it might be
a lower-impact solution. Even if it doesn't solve your
problem, I think it is still an improvement over what
exists and could co-exist with your patch.
-- Keith Casciogit-gui/lib/diff.tcl | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl index bbbf15c..94faf95 100644 --- a/git-gui/lib/diff.tcl +++ b/git-gui/lib/diff.tcl @@ -276,6 +276,7 @@ proc start_show_diff {cont_info {add_opts {}}} { } lappend cmd -p + lappend cmd --exit-code lappend cmd --no-color if {$repo_config(gui.diffcontext) >= 1} { lappend cmd "-U$repo_config(gui.diffcontext)" @@ -310,6 +311,7 @@ proc read_diff {fd cont_info} { global ui_diff diff_active global is_3way_diff is_conflict_diff current_diff_header global current_diff_queue + global errorCode $ui_diff conf -state normal while {[gets $fd line] >= 0} { @@ -397,7 +399,9 @@ proc read_diff {fd cont_info} { $ui_diff conf -state disabled if {[eof $fd]} { - close $fd + fconfigure $fd -blocking 1 + catch { close $fd } err + set diff_exit_status $errorCode if {$current_diff_queue ne {}} { advance_diff_queue $cont_info @@ -413,7 +417,7 @@ proc read_diff {fd cont_info} { } ui_ready - if {[$ui_diff index end] eq {2.0}} { + if {$diff_exit_status eq "NONE"} { handle_empty_diff } set callback [lindex $cont_info 1]
-- 1.6.1