summaryrefslogtreecommitdiff
path: root/gitk
diff options
context:
space:
mode:
authorLibravatar Paul Mackerras <paulus@samba.org>2007-06-18 22:39:21 +1000
committerLibravatar Paul Mackerras <paulus@samba.org>2007-06-23 20:58:09 +1000
commitf3326b66bf8d77c19b5ca7ad70e536251c81cccb (patch)
tree5b7726e76559ca71b3a497a4070f01b5a3bf0a9c /gitk
parentgitk: Limit how often we change the canvas scrolling region (diff)
downloadtgif-f3326b66bf8d77c19b5ca7ad70e536251c81cccb.tar.xz
gitk: Fix bug causing nearby tags/heads to sometimes not be displayed
When we compute descendent heads and descendent/ancestor tags, we cache the results. We need to be careful to invalidate the cache when we add stuff to the graph. Also make sure that when we cache descendent heads for a node we only cache the heads that are actually descendents of that node. Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'gitk')
-rwxr-xr-xgitk14
1 files changed, 11 insertions, 3 deletions
diff --git a/gitk b/gitk
index d5b71dd45d..ac73ff6e42 100755
--- a/gitk
+++ b/gitk
@@ -5950,7 +5950,7 @@ proc regetallcommits {} {
# coming from descendents, and "outgoing" means going towards ancestors.
proc getallclines {fd} {
- global allids allparents allchildren idtags nextarc nbmp
+ global allids allparents allchildren idtags idheads nextarc nbmp
global arcnos arcids arctags arcout arcend arcstart archeads growing
global seeds allcommits
@@ -6023,6 +6023,12 @@ proc getallclines {fd} {
}
set arcout($id) $ao
}
+ if {$nid > 0} {
+ global cached_dheads cached_dtags cached_atags
+ catch {unset cached_dheads}
+ catch {unset cached_dtags}
+ catch {unset cached_atags}
+ }
if {![eof $fd]} {
return [expr {$nid >= 1000? 2: 1}]
}
@@ -6674,7 +6680,7 @@ proc descheads {id} {
if {![info exists allparents($id)]} {
return {}
}
- set ret {}
+ set aret {}
if {[llength $arcnos($id)] == 1 && [llength $allparents($id)] == 1} {
# part-way along an arc; check it first
set a [lindex $arcnos($id) 0]
@@ -6684,7 +6690,7 @@ proc descheads {id} {
foreach t $archeads($a) {
set j [lsearch -exact $arcids($a) $t]
if {$j > $i} break
- lappend $ret $t
+ lappend aret $t
}
}
set id $arcstart($a)
@@ -6692,6 +6698,7 @@ proc descheads {id} {
set origid $id
set todo [list $id]
set seen($id) 1
+ set ret {}
for {set i 0} {$i < [llength $todo]} {incr i} {
set id [lindex $todo $i]
if {[info exists cached_dheads($id)]} {
@@ -6714,6 +6721,7 @@ proc descheads {id} {
}
set ret [lsort -unique $ret]
set cached_dheads($origid) $ret
+ return [concat $ret $aret]
}
proc addedtag {id} {