gitk: Don't try to show local changes from a head that isn't shown
authorPaul Mackerras <paulus@samba.org>
Sat, 29 Dec 2007 10:13:34 +0000 (21:13 +1100)
committerPaul Mackerras <paulus@samba.org>
Sat, 29 Dec 2007 10:13:34 +0000 (21:13 +1100)
When updating the display, if the checked-out head has moved on and
isn't currently shown, and there are local changes, we could try to
insert a fake row with a parent that isn't displayed, leading to a
Tcl error.  This is because we check whether the checked-out head
is displayed before rereading the references (which is when we discover
that the head has moved).  This fixes it.

Signed-off-by: Paul Mackerras <paulus@samba.org>
gitk

diff --git a/gitk b/gitk
index b5c9e7a1b4165d34d7aec1beb670a6b268ff8375..5022fac83c5c14ae7d27f601dc3e054deb93144b 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -170,11 +170,18 @@ proc updatecommits {} {
     global curview viewargs viewfiles viewincl viewinstances
     global viewactive viewcomplete loginstance tclencoding mainheadid
     global varcid startmsecs commfd showneartags showlocalchanges leftover
+    global mainheadid
 
-    if {$showlocalchanges && [commitinview $mainheadid $curview]} {
-       dodiffindex
-    }
+    set oldmainid $mainheadid
     rereadrefs
+    if {$showlocalchanges} {
+       if {$mainheadid ne $oldmainid} {
+           dohidelocalchanges
+       }
+       if {[commitinview $mainheadid $curview]} {
+           dodiffindex
+       }
+    }
     set view $curview
     set commits [exec git rev-parse --default HEAD --revs-only \
                     $viewargs($view)]