threads / patch / 20362

patchgitk: new option to hide remote refs

Subject: [PATCH] gitk: new option to hide remote refs

## tl;dr

6 messages between Aug 3, 2009 and Aug 13, 2009. Diffs are folded; open one to read it.

replies: 5people: 5as markdown or json

Thomas Rast· Aug 3, 2009, 21:53 UTC · lore

In repositories with lots of remotes, looking at the history in gitk can be borderline insane with all the red labels for remote refs. Introduce a new option in the preferences that hides them.

Wished-for-by: Thell Fowler <tbfowler4@gmail.com>
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---

I hope the IRC-to-mail matching worked out right. I needed this too, for a repo where I deploy for testing directly through git (with hooks) -- to several machines, resulting in a forest of remote labels.

 gitk |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)
Show changes to gitk +15 −3
diff --git a/gitk b/gitk
index 4604c83..aabebac 100755
--- a/gitk
+++ b/gitk
@@ -1677,6 +1677,7 @@ proc readrefs {} {
     global tagids idtags headids idheads tagobjid
     global otherrefids idotherrefs mainhead mainheadid
     global selecthead selectheadid
+    global hideremotes
 
     foreach v {tagids idtags headids idheads otherrefids idotherrefs} {
 	catch {unset $v}
@@ -1689,7 +1690,7 @@ proc readrefs {} {
 	if {![string match "refs/*" $ref]} continue
 	set name [string range $ref 5 end]
 	if {[string match "remotes/*" $name]} {
-	    if {![string match "*/HEAD" $name]} {
+	    if {![string match "*/HEAD" $name] && !$hideremotes} {
 		set headids($name) $id
 		lappend idheads($id) $name
 	    }
@@ -2520,6 +2521,7 @@ proc savestuff {w} {
     global cmitmode wrapcomment datetimeformat limitdiffs
     global colors bgcolor fgcolor diffcolors diffcontext selectbgcolor
     global autoselect extdifftool perfile_attrs markbgcolor
+    global hideremotes
 
     if {$stuffsaved} return
     if {![winfo viewable .]} return
@@ -2539,6 +2541,7 @@ proc savestuff {w} {
 	puts $f [list set wrapcomment $wrapcomment]
 	puts $f [list set autoselect $autoselect]
 	puts $f [list set showneartags $showneartags]
+	puts $f [list set hideremotes $hideremotes]
 	puts $f [list set showlocalchanges $showlocalchanges]
 	puts $f [list set datetimeformat $datetimeformat]
 	puts $f [list set limitdiffs $limitdiffs]
@@ -10383,6 +10386,7 @@ proc doprefs {} {
     global oldprefs prefstop showneartags showlocalchanges
     global bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
     global tabstop limitdiffs autoselect extdifftool perfile_attrs
+    global hideremotes
 
     set top .gitkprefs
     set prefstop $top
@@ -10391,7 +10395,7 @@ proc doprefs {} {
 	return
     }
     foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
-		   limitdiffs tabstop perfile_attrs} {
+		   limitdiffs tabstop perfile_attrs hideremotes} {
 	set oldprefs($v) [set $v]
     }
     toplevel $top
@@ -10423,6 +10427,9 @@ proc doprefs {} {
     checkbutton $top.ntag -text [mc "Display nearby tags"] \
 	-font optionfont -variable showneartags
     grid x $top.ntag -sticky w
+    checkbutton $top.hideremotes -text [mc "Hide remote refs"] \
+	-font optionfont -variable hideremotes
+    grid x $top.hideremotes -sticky w
     checkbutton $top.ldiff -text [mc "Limit diffs to listed paths"] \
 	-font optionfont -variable limitdiffs
     grid x $top.ldiff -sticky w
@@ -10547,7 +10554,7 @@ proc prefscan {} {
     global oldprefs prefstop
 
     foreach v {maxwidth maxgraphpct showneartags showlocalchanges \
-		   limitdiffs tabstop perfile_attrs} {
+		   limitdiffs tabstop perfile_attrs hideremotes} {
 	global $v
 	set $v $oldprefs($v)
     }
@@ -10561,6 +10568,7 @@ proc prefsok {} {
     global oldprefs prefstop showneartags showlocalchanges
     global fontpref mainfont textfont uifont
     global limitdiffs treediffs perfile_attrs
+    global hideremotes
 
     catch {destroy $prefstop}
     unset prefstop
@@ -10606,6 +10614,9 @@ proc prefsok {} {
 	  $limitdiffs != $oldprefs(limitdiffs)} {
 	reselectline
     }
+    if {$hideremotes != $oldprefs(hideremotes)} {
+	rereadrefs
+    }
 }
 
 proc formatdate {d} {
@@ -11011,6 +11022,7 @@ set mingaplen 100
 set cmitmode "patch"
 set wrapcomment "none"
 set showneartags 1
+set hideremotes 0
 set maxrefs 20
 set maxlinelen 200
 set showlocalchanges 1
-- 
1.6.4.249.gea1ec
Junio C Hamano· Aug 4, 2009, 06:28 UTC · re: Thomas Rast · lore

Re: [PATCH] gitk: new option to hide remote refs

Thomas Rast <trast@student.ethz.ch> writes:
Show 9 quoted lines
> @@ -1689,7 +1690,7 @@ proc readrefs {} {
>  	if {![string match "refs/*" $ref]} continue
>  	set name [string range $ref 5 end]
>  	if {[string match "remotes/*" $name]} {
> -	    if {![string match "*/HEAD" $name]} {
> +	    if {![string match "*/HEAD" $name] && !$hideremotes} {
>  		set headids($name) $id
>  		lappend idheads($id) $name
>  	    }

Hmm, I wonder if it would be more useful to extend this by using $skiprefs pattern instead, like so:

>  	if {![string match "refs/*" $ref]} continue
>  	set name [string range $ref 5 end]
+	if {$skiprefs != "" && [string match $skiprefs $name]} continue
>  	if {[string match "remotes/*" $name]} {
> 	    if {![string match "*/HEAD" $name]} {
	...
Thomas Rast· Aug 4, 2009, 09:08 UTC · re: Junio C Hamano · lore

Re: [PATCH] gitk: new option to hide remote refs

Junio C Hamano wrote:
Show 7 quoted lines
> Thomas Rast <trast@student.ethz.ch> writes:
> 
> > -	    if {![string match "*/HEAD" $name]} {
> > +	    if {![string match "*/HEAD" $name] && !$hideremotes} {
> 
> Hmm, I wonder if it would be more useful to extend this by using $skiprefs
> pattern instead, like so:
[...]
> +	if {$skiprefs != "" && [string match $skiprefs $name]} continue

Shortly after sending the patch, I had another idea: how about an option to only show refs that were given on the command line, if any? That way 'gitk --branches' or 'gitk HEAD' would hide the whole remotes mess (and of course also all other refs in the process). I think I might be able to voodoo enough Tk to implement this.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Santi Béjar· Aug 4, 2009, 09:44 UTC · re: Thomas Rast · lore

Re: [PATCH] gitk: new option to hide remote refs

2009/8/4 Thomas Rast <trast@student.ethz.ch>:
Show 16 quoted lines
> Junio C Hamano wrote:
>> Thomas Rast <trast@student.ethz.ch> writes:
>>
>> > -       if {![string match "*/HEAD" $name]} {
>> > +       if {![string match "*/HEAD" $name] && !$hideremotes} {
>>
>> Hmm, I wonder if it would be more useful to extend this by using $skiprefs
>> pattern instead, like so:
> [...]
>> +     if {$skiprefs != "" && [string match $skiprefs $name]} continue
>
> Shortly after sending the patch, I had another idea: how about an
> option to only show refs that were given on the command line, if any?
> That way 'gitk --branches' or 'gitk HEAD' would hide the whole remotes
> mess (and of course also all other refs in the process).  I think I
> might be able to voodoo enough Tk to implement this.

Another possibility could be to have just an indication that the commit has branches and/or tags pointing to it. Maybe just as it is now but without the branch/tag name.

To mimic the current UI it could be:
o-<|-|_| Commit summary
with:
 o the current circle
 <| a yellow triangle
 |_| a green square

and then if you click on them you could get the current view, or a list of branches/tags in the lower panel.

my 2 cents, Santi

Thell Fowler· Aug 10, 2009, 00:14 UTC · re: Thomas Rast · lore

Re: [PATCH] gitk: new option to hide remote refs

Thomas Rast (trast@student.ethz.ch) wrote on Aug 3, 2009:
> In repositories with lots of remotes, looking at the history in gitk
> can be borderline insane with all the red labels for remote refs.
> Introduce a new option in the preferences that hides them.

Thanks for doing this! It definitely is saving the sanity and is working great!

-- 
Thell
Paul Mackerras· Aug 13, 2009, 11:53 UTC · re: Thomas Rast · lore

Re: [PATCH] gitk: new option to hide remote refs

Thomas Rast writes:
> In repositories with lots of remotes, looking at the history in gitk
> can be borderline insane with all the red labels for remote refs.
> Introduce a new option in the preferences that hides them.

Thanks, applied. I modified the patch description slightly since the patched gitk doesn't just hide the remote refs, it ignores them completely ("hide" implies to me that gitk still knows about them but chooses not to show them).

Paul.

← back to recent threads