Fix earlier mismerges.
[git.git] / gitk
diff --git a/gitk b/gitk
index 3db6625..91c11a3 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -3568,14 +3568,17 @@ proc viewnextline {dir} {
     allcanvs yview moveto [expr {$newtop * 1.0 / $ymax}]
 }
 
-# add a list of tag names at position pos
-proc appendrefs {pos l} {
-    global ctext commitrow linknum curview idtags
+# add a list of tag or branch names at position pos
+# returns the number of names inserted
+proc appendrefs {pos l var} {
+    global ctext commitrow linknum curview idtags $var
 
-    if {[catch {$ctext index $pos}]} return
+    if {[catch {$ctext index $pos}]} {
+       return 0
+    }
     set tags {}
     foreach id $l {
-       foreach tag $idtags($id) {
+       foreach tag [set $var\($id\)] {
            lappend tags [concat $tag $id]
        }
     }
@@ -3598,20 +3601,27 @@ proc appendrefs {pos l} {
        }
        set sep ", "
     }
+    return [llength $tags]
 }
 
 # called when we have finished computing the nearby tags
 proc dispneartags {} {
     global selectedline currentid ctext anc_tags desc_tags showneartags
+    global desc_heads
 
     if {![info exists selectedline] || !$showneartags} return
     set id $currentid
     $ctext conf -state normal
+    if {[info exists desc_heads($id)]} {
+       if {[appendrefs branch $desc_heads($id) idheads] > 1} {
+           $ctext insert "branch -2c" "es"
+       }
+    }
     if {[info exists anc_tags($id)]} {
-       appendrefs follows $anc_tags($id)
+       appendrefs follows $anc_tags($id) idtags
     }
     if {[info exists desc_tags($id)]} {
-       appendrefs precedes $desc_tags($id)
+       appendrefs precedes $desc_tags($id) idtags
     }
     $ctext conf -state disabled
 }
@@ -3623,7 +3633,7 @@ proc selectline {l isnew} {
     global currentid sha1entry
     global commentend idtags linknum
     global mergemax numcommits pending_select
-    global cmitmode desc_tags anc_tags showneartags allcommits
+    global cmitmode desc_tags anc_tags showneartags allcommits desc_heads
 
     catch {unset pending_select}
     $canv delete hover
@@ -3740,17 +3750,26 @@ proc selectline {l isnew} {
        if {![info exists allcommits]} {
            getallcommits
        }
-       $ctext insert end "Follows: "
+       $ctext insert end "Branch: "
+       $ctext mark set branch "end -1c"
+       $ctext mark gravity branch left
+       if {[info exists desc_heads($id)]} {
+           if {[appendrefs branch $desc_heads($id) idheads] > 1} {
+               # turn "Branch" into "Branches"
+               $ctext insert "branch -2c" "es"
+           }
+       }
+       $ctext insert end "\nFollows: "
        $ctext mark set follows "end -1c"
        $ctext mark gravity follows left
        if {[info exists anc_tags($id)]} {
-           appendrefs follows $anc_tags($id)
+           appendrefs follows $anc_tags($id) idtags
        }
        $ctext insert end "\nPrecedes: "
        $ctext mark set precedes "end -1c"
        $ctext mark gravity precedes left
        if {[info exists desc_tags($id)]} {
-           appendrefs precedes $desc_tags($id)
+           appendrefs precedes $desc_tags($id) idtags
        }
        $ctext insert end "\n"
     }
@@ -5042,6 +5061,7 @@ proc combine_atags {l1 l2} {
 proc getallclines {fd} {
     global allparents allchildren allcommits allcstart
     global desc_tags anc_tags idtags alldtags tagisdesc allids
+    global desc_heads idheads
 
     while {[gets $fd line] >= 0} {
        set id [lindex $line 0]
@@ -5055,7 +5075,9 @@ proc getallclines {fd} {
            lappend allchildren($p) $id
        }
        # compute nearest tagged descendents as we go
+       # also compute descendent heads
        set dtags {}
+       set dheads {}
        foreach child $allchildren($id) {
            if {[info exists idtags($child)]} {
                set ctags [list $child]
@@ -5067,6 +5089,12 @@ proc getallclines {fd} {
            } elseif {$ctags ne $dtags} {
                set dtags [combine_dtags $dtags $ctags]
            }
+           set cheads $desc_heads($child)
+           if {$dheads eq {}} {
+               set dheads $cheads
+           } elseif {$cheads ne $dheads} {
+               set dheads [lsort -unique [concat $dheads $cheads]]
+           }
        }
        set desc_tags($id) $dtags
        if {[info exists idtags($id)]} {
@@ -5081,6 +5109,10 @@ proc getallclines {fd} {
                set tagisdesc($tag,$id) 1
            }
        }
+       if {[info exists idheads($id)]} {
+           lappend dheads $id
+       }
+       set desc_heads($id) $dheads
        if {[clock clicks -milliseconds] - $allcstart >= 50} {
            fileevent $fd readable {}
            after idle restartgetall $fd