gitk: Fix bug causing the "can't unset idinlist(...)" error
Under some circumstances, having duplicate parents in a commit could trigger a "can't unset idinlist" Tcl error. This fixes the cause (the logic in layoutrows could end up putting the same commit into rowidlist twice) and also puts a catch around the unset to ignore the error. Thanks to Jeff King for coming up with a test script to generate a repo that shows the problem. Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
3244729aac
commit
67a4f1a7f5
5
gitk
5
gitk
@ -2880,6 +2880,7 @@ proc layoutrows {row endrow last} {
|
|||||||
} elseif {!$idinlist($p)} {
|
} elseif {!$idinlist($p)} {
|
||||||
lappend oldolds $p
|
lappend oldolds $p
|
||||||
}
|
}
|
||||||
|
set idinlist($p) 1
|
||||||
}
|
}
|
||||||
set nev [expr {[llength $idlist] + [llength $newolds]
|
set nev [expr {[llength $idlist] + [llength $newolds]
|
||||||
+ [llength $oldolds] - $maxwidth + 1}]
|
+ [llength $oldolds] - $maxwidth + 1}]
|
||||||
@ -2952,12 +2953,10 @@ proc layoutrows {row endrow last} {
|
|||||||
lset offs $col {}
|
lset offs $col {}
|
||||||
}
|
}
|
||||||
foreach i $newolds {
|
foreach i $newolds {
|
||||||
set idinlist($i) 1
|
|
||||||
set idrowranges($i) $id
|
set idrowranges($i) $id
|
||||||
}
|
}
|
||||||
incr col $l
|
incr col $l
|
||||||
foreach oid $oldolds {
|
foreach oid $oldolds {
|
||||||
set idinlist($oid) 1
|
|
||||||
set idlist [linsert $idlist $col $oid]
|
set idlist [linsert $idlist $col $oid]
|
||||||
set offs [linsert $offs $col $o]
|
set offs [linsert $offs $col $o]
|
||||||
makeuparrow $oid $col $row $o
|
makeuparrow $oid $col $row $o
|
||||||
@ -2998,7 +2997,7 @@ proc layouttail {} {
|
|||||||
set col [expr {[llength $idlist] - 1}]
|
set col [expr {[llength $idlist] - 1}]
|
||||||
set id [lindex $idlist $col]
|
set id [lindex $idlist $col]
|
||||||
addextraid $id $row
|
addextraid $id $row
|
||||||
unset idinlist($id)
|
catch {unset idinlist($id)}
|
||||||
lappend idrowranges($id) $id
|
lappend idrowranges($id) $id
|
||||||
lappend rowrangelist $idrowranges($id)
|
lappend rowrangelist $idrowranges($id)
|
||||||
unset idrowranges($id)
|
unset idrowranges($id)
|
||||||
|
Loading…
Reference in New Issue
Block a user