From 0a4dd8b855fb5e4997087badbb6291cfc3f57baf Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Sat, 16 Jun 2007 21:21:57 +1000 Subject: [PATCH] gitk: Don't try to list large numbers of tags or heads in the details pane With some large repositories, a commit can end up on thousands of branches, which results in an extremely long "Branches:" line in the details window, and that results in the window being extremely slow to scroll. This fixes it by just showing "many (N)" after "Branches:", "Follows:" or "Precedes:", where N is the number of heads or tags. The limit is currently set at 20 but could be made configurable (and the "many" could be a link to pop up a window listing them all in case anyone really wants to know). Signed-off-by: Paul Mackerras --- gitk | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/gitk b/gitk index 5948ec37c5..de5bae7a0e 100755 --- a/gitk +++ b/gitk @@ -3831,7 +3831,7 @@ proc viewnextline {dir} { # add a list of tag or branch names at position pos # returns the number of names inserted proc appendrefs {pos ids var} { - global ctext commitrow linknum curview $var + global ctext commitrow linknum curview $var maxrefs if {[catch {$ctext index $pos}]} { return 0 @@ -3844,24 +3844,29 @@ proc appendrefs {pos ids var} { lappend tags [list $tag $id] } } - set tags [lsort -index 0 -decreasing $tags] - set sep {} - foreach ti $tags { - set id [lindex $ti 1] - set lk link$linknum - incr linknum - $ctext tag delete $lk - $ctext insert $pos $sep - $ctext insert $pos [lindex $ti 0] $lk - if {[info exists commitrow($curview,$id)]} { - $ctext tag conf $lk -foreground blue - $ctext tag bind $lk <1> \ - [list selectline $commitrow($curview,$id) 1] - $ctext tag conf $lk -underline 1 - $ctext tag bind $lk { %W configure -cursor hand2 } - $ctext tag bind $lk { %W configure -cursor $curtextcursor } + if {[llength $tags] > $maxrefs} { + $ctext insert $pos "many ([llength $tags])" + } else { + set tags [lsort -index 0 -decreasing $tags] + set sep {} + foreach ti $tags { + set id [lindex $ti 1] + set lk link$linknum + incr linknum + $ctext tag delete $lk + $ctext insert $pos $sep + $ctext insert $pos [lindex $ti 0] $lk + if {[info exists commitrow($curview,$id)]} { + $ctext tag conf $lk -foreground blue + $ctext tag bind $lk <1> \ + [list selectline $commitrow($curview,$id) 1] + $ctext tag conf $lk -underline 1 + $ctext tag bind $lk { %W configure -cursor hand2 } + $ctext tag bind $lk \ + { %W configure -cursor $curtextcursor } + } + set sep ", " } - set sep ", " } $ctext conf -state disabled return [llength $tags] @@ -6856,6 +6861,7 @@ set mingaplen 30 set cmitmode "patch" set wrapcomment "none" set showneartags 1 +set maxrefs 20 set colors {green red blue magenta darkgrey brown orange} set bgcolor white -- 2.11.4.GIT