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

[PATCH] gitk: ensure quoted tag names in event bindings

From
Pat Thoyts <patthoyts@users.sourceforge.net>
Date
Mar 1, 2011, 23:50 UTC
Message-ID
<87tyfmqu1x.fsf_-_@fox.patthoyts.tk>
In-Reply-To
<20110301013841.GC5597@elie>

Tag names that contain a % character require quoting when used in event bindings or the name may be mis-recognised for percent substitution in the event script.

Reported-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
---
Jonathan Nieder <jrnieder@gmail.com> writes:
Show 34 quoted lines
>Hi,
>
>Felipe Sateler wrote[1]:
>
>> Gitk chokes on tags containing a % character.
>
>Reproduced as follows:
>
>	git tag a%b
>	gitk
>
>and then clicking on the "| a%b >" symbol.
>
>Result:
>
>	can't read "tagids(foo1ar)": no such element in array
>	can't read "tagids(foo1ar)": no such element in array
>	    while executing
>	"set text "[mc "Tag"]: $tag\n[mc "Id"]:  $tagids($tag)""
>	    (procedure "showtag" line 19)
>	    invoked from within
>	"showtag foo1ar 1"
>	    (command bound to event)
>
>It seems that a tag containing a percent sign works okay in
>an expression like $tagids($tag), but not in a quoted expression
>like "$tagids($tag)".
>
>Hints?
>
>Thanks for gitk, of course. :)
>Jonathan
>
>[1] http://bugs.debian.org/615645
 gitk |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/gitk b/gitk
index 9cbc09d..6513537 100755
--- a/gitk
+++ b/gitk
@@ -6300,6 +6300,7 @@ proc drawtags {id x xt y1} {
 	       -width $lthickness -fill black -tags tag.$id]
     $canv lower $t
     foreach tag $marks x $xvals wid $wvals {
+	set tag_quoted [string map {% %%} $tag]
 	set xl [expr {$x + $delta}]
 	set xr [expr {$x + $delta + $wid + $lthickness}]
 	set font mainfont
@@ -6308,7 +6309,7 @@ proc drawtags {id x xt y1} {
 	    set t [$canv create polygon $x [expr {$yt + $delta}] $xl $yt \
 		       $xr $yt $xr $yb $xl $yb $x [expr {$yb - $delta}] \
 		       -width 1 -outline black -fill yellow -tags tag.$id]
-	    $canv bind $t <1> [list showtag $tag 1]
+	    $canv bind $t <1> [list showtag $tag_quoted 1]
 	    set rowtextx([rowofcommit $id]) [expr {$xr + $linespc}]
 	} else {
 	    # draw a head or other ref
@@ -6335,9 +6336,9 @@ proc drawtags {id x xt y1} {
 	set t [$canv create text $xl $y1 -anchor w -text $tag -fill $fgcolor \
 		   -font $font -tags [list tag.$id text]]
 	if {$ntags >= 0} {
-	    $canv bind $t <1> [list showtag $tag 1]
+	    $canv bind $t <1> [list showtag $tag_quoted 1]
 	} elseif {$nheads >= 0} {
-	    $canv bind $t $ctxbut [list headmenu %X %Y $id $tag]
+	    $canv bind $t $ctxbut [list headmenu %X %Y $id $tag_quoted]
 	}
     }
     return $xt
-- 
1.7.4.msysgit.0
Previous: Jonathan NiederNext: Jonathan Nieder
Message 2 of 4 in “Re: gitk: cannot handle tags with a % in them”
  1. Jonathan NiederMar 1, 2011
  2. gitk: ensure quoted tag names in event bindingsPat Thoyts, Mar 1, 2011
  3. Jonathan NiederMar 2, 2011
  4. Paul MackerrasMar 9, 2011

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.