git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] gitk: Alter the ordering for the "Tags and heads" view

From
Michael Rappazzo <rappazzo@gmail.com>
Date
Jun 2, 2015, 11:11 UTC
Message-ID
<1433243470-93392-2-git-send-email-rappazzo@gmail.com>
In-Reply-To
<1433243470-93392-1-git-send-email-rappazzo@gmail.com>

In the "Tags and heads" view, the list of refs is globally sorted. The list of local refs (heads) is separated by the remote refs. This change re-orders the view toi be: local refs, remote refs tracked by local refs, remote refs, tags, and then other refs

Signed-off-by: Michael Rappazzo <rappazzo@gmail.com>
---
 gitk-git/gitk | 48 ++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 42 insertions(+), 6 deletions(-)
diff --git a/gitk-git/gitk b/gitk-git/gitk
index 9a2daf3..431a6a1 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -9879,35 +9879,71 @@ proc refill_reflist {} {
     global curview
 
     if {![info exists showrefstop] || ![winfo exists $showrefstop]} return
-    set refs {}
+    set localrefs {}
+    set remoterefs {}
+    set locally_tracked_remote_refs {}
+    set tagrefs {}
+    set otherrefs {}
     foreach n [array names headids] {
-	if {[string match $reflistfilter $n]} {
+	if {![string match "remotes/*" $n] && [string match $reflistfilter $n]} {
+	    if {[commitinview $headids($n) $curview]} {
+		lappend localrefs [list $n H]
+		catch {set remote_name [exec git config --get branch.$n.remote]}
+		if {$remote_name ne ""} {
+		    catch {set remote_ref [exec git config --get branch.$n.merge]}
+		    set remote_ref [string map {"refs/heads/" ""} $remote_ref]
+		    set locally_tracked_remote_ref "remotes/$remote_name/$remote_ref"
+		    catch {set exists [exec git rev-parse --verify $locally_tracked_remote_ref]}
+		    if {$exists ne ""} {
+			if {[lsearch $locally_tracked_remote_refs [list $locally_tracked_remote_ref H]] < 0} {
+			    lappend locally_tracked_remote_refs [list $locally_tracked_remote_ref H]
+			}
+		    }
+		    set exists ""
+		}
+	    } else {
+    		interestedin $headids($n) {run refill_reflist}
+	    }
+	}
+    }
+    set locally_tracked_remote_refs [lsort -index 0 $locally_tracked_remote_refs]
+    set localrefs [lsort -index 0 $localrefs]
+       
+    foreach n [array names headids] {
+	if {[string match "remotes/*" $n] && [string match $reflistfilter $n]} {
 	    if {[commitinview $headids($n) $curview]} {
-		lappend refs [list $n H]
+		if {[lsearch $locally_tracked_remote_refs [list $n H]] < 0} {
+		    lappend remoterefs [list $n H]
+        	}
 	    } else {
 		interestedin $headids($n) {run refill_reflist}
 	    }
 	}
     }
+    set remoterefs [lsort -index 0 $remoterefs]
+
     foreach n [array names tagids] {
 	if {[string match $reflistfilter $n]} {
 	    if {[commitinview $tagids($n) $curview]} {
-		lappend refs [list $n T]
+		lappend tagrefs [list $n T]
 	    } else {
 		interestedin $tagids($n) {run refill_reflist}
 	    }
 	}
     }
+    set tagrefs [lsort -index 0 $tagrefs]
+
     foreach n [array names otherrefids] {
 	if {[string match $reflistfilter $n]} {
 	    if {[commitinview $otherrefids($n) $curview]} {
-		lappend refs [list $n o]
+		lappend otherrefs [list "$n" o]
 	    } else {
 		interestedin $otherrefids($n) {run refill_reflist}
 	    }
 	}
     }
-    set refs [lsort -index 0 $refs]
+    set otherrefs [lsort -index 0 $otherrefs]
+    lappend refs {*}$localrefs {*}$locally_tracked_remote_refs {*}$remoterefs {*}$tagrefs {*}$otherrefs
     if {$refs eq $reflist} return
 
     # Update the contents of $showrefstop.list according to the
-- 
2.4.2
Previous: Michael RappazzoNext: Paul Mackerras
Message 2 of 3 in “gitk: Alter the ordering for the "Tags and heads" view”
  1. gitk: Alter the ordering for the "Tags and heads" viewMichael Rappazzo, Jun 2, 2015
  2. gitk: Alter the ordering for the "Tags and heads" viewMichael Rappazzo, Jun 2, 2015
  3. Paul MackerrasAug 13, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.