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 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
     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)]
     set view $curview
     set commits [exec git rev-parse --default HEAD --revs-only \
                     $viewargs($view)]