gitk: Fix a bug in make_disporder
authorPaul Mackerras <paulus@samba.org>
Sat, 12 Jan 2008 10:46:31 +0000 (21:46 +1100)
committerPaul Mackerras <paulus@samba.org>
Sat, 12 Jan 2008 10:46:31 +0000 (21:46 +1100)
The make_disporder function has an optimization where it assumed that
if displayorder was already long enough and the first entry in it for
a particular arc was non-null, then the whole arc was present.  This
turns out not to be true in some circumstances, since we can add a
commit to an arc (which truncates displayorder to the previous end of
that arc), then call make_disporder for later arcs (which will pad
displayorder with null elements), then call make_disporder for the
first arc - which won't update the null elements.

This fixes it by changing the optimization to check the last element
for the arc instead of the first.

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

diff --git a/gitk b/gitk
index 97d1be092aa41fb3dafe4a79dd4699c91bf23142..8699e1bb4f97dc3e1a6ec9d5a43e4fdf6323a3e8 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -853,7 +853,7 @@ proc make_disporder {start end} {
                lappend displayorder $id
                lappend parentlist $parents($curview,$id)
            }
-       } elseif {[lindex $displayorder $r] eq {}} {
+       } elseif {[lindex $displayorder [expr {$r + $al - 1}]] eq {}} {
            set i $r
            foreach id $varccommits($curview,$a) {
                lset displayorder $i $id