threads / patch / 60816

patchgitk: add "Hightlight commit name" menu entry

Subject: [PATCH] gitk: add "Hightlight commit name" menu entry

## tl;dr

6 messages between Jan 30, 2024 and Mar 25, 2024. Diffs are folded; open one to read it.

replies: 5people: 3as markdown or json

Raphael Gallais-Pou· Jan 30, 2024, 08:53 UTC · lore

When working with diverged branches, some patches can appear several times on different branches without having the need to merge those branches. On the other hand you may have to port a specific patch on another branch you are working on. The search with a SHA1 cannot be applied here since they would differ.

This patch adds an entry in the main context menu to highlight every instance of a commit.

Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
---
 gitk-git/gitk | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)
Show changes to gitk-git/gitk +20 −3
diff --git a/gitk-git/gitk b/gitk-git/gitk
index 7a087f123d..4b15230a16 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -2672,6 +2672,7 @@ proc makewindow {} {
         {mc "Make patch" command mkpatch}
         {mc "Create tag" command mktag}
         {mc "Copy commit reference" command copyreference}
+	{mc "Highlight commit name" command highlightcommitname}
         {mc "Write commit to file" command writecommit}
         {mc "Create new branch" command mkbranch}
         {mc "Cherry-pick this commit" command cherrypick}
@@ -9002,13 +9003,13 @@ proc rowmenu {x y id} {
     if {$id ne $nullid && $id ne $nullid2} {
         set menu $rowctxmenu
         if {$mainhead ne {}} {
-            $menu entryconfigure 8 -label [mc "Reset %s branch to here" $mainhead] -state normal
+            $menu entryconfigure 9 -label [mc "Reset %s branch to here" $mainhead] -state normal
         } else {
-            $menu entryconfigure 8 -label [mc "Detached head: can't reset" $mainhead] -state disabled
+            $menu entryconfigure 9 -label [mc "Detached head: can't reset" $mainhead] -state disabled
         }
-        $menu entryconfigure 10 -state $mstate
         $menu entryconfigure 11 -state $mstate
         $menu entryconfigure 12 -state $mstate
+        $menu entryconfigure 13 -state $mstate
     } else {
         set menu $fakerowmenu
     }
@@ -9481,6 +9482,22 @@ proc copyreference {} {
     clipboard append $reference
 }
 
+proc highlightcommitname {} {
+    global rowmenuid autosellen findstring gdttype
+
+    set format "%s"
+    set cmd [list git show -s --pretty=format:$format --date=short]
+    if {$autosellen < 40} {
+        lappend cmd --abbrev=$autosellen
+    }
+    set reference [eval exec $cmd $rowmenuid]
+    set findstring $reference
+    set gdttype [mc "containing:"]
+
+    clipboard clear
+    clipboard append $reference
+}
+
 proc writecommit {} {
     global rowmenuid wrcomtop commitinfo wrcomcmd NS
 
-- 
2.43.0
Raphaël Gallais-Pou· Mar 19, 2024, 19:45 UTC · re: Raphael Gallais-Pou · lore

Re: [PATCH] gitk: add "Hightlight commit name" menu entry

Hi,

Gentle ping since I haven't received any reviews or comment on this patch. :)

Do you guys actually take patches for the gitk tool ? I feel like there is not much features added on this.

Regards, Raphaël

Le 30/01/2024 à 09:53, Raphael Gallais-Pou a écrit :
Show 66 quoted lines
> When working with diverged branches, some patches can appear several times
> on different branches without having the need to merge those branches.
> On the other hand you may have to port a specific patch on another
> branch you are working on. The search with a SHA1 cannot be applied here
> since they would differ.
> 
> This patch adds an entry in the main context menu to highlight every
> instance of a commit.
> 
> Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
> ---
>   gitk-git/gitk | 23 ++++++++++++++++++++---
>   1 file changed, 20 insertions(+), 3 deletions(-)
> 
> diff --git a/gitk-git/gitk b/gitk-git/gitk
> index 7a087f123d..4b15230a16 100755
> --- a/gitk-git/gitk
> +++ b/gitk-git/gitk
> @@ -2672,6 +2672,7 @@ proc makewindow {} {
>           {mc "Make patch" command mkpatch}
>           {mc "Create tag" command mktag}
>           {mc "Copy commit reference" command copyreference}
> +	{mc "Highlight commit name" command highlightcommitname}
>           {mc "Write commit to file" command writecommit}
>           {mc "Create new branch" command mkbranch}
>           {mc "Cherry-pick this commit" command cherrypick}
> @@ -9002,13 +9003,13 @@ proc rowmenu {x y id} {
>       if {$id ne $nullid && $id ne $nullid2} {
>           set menu $rowctxmenu
>           if {$mainhead ne {}} {
> -            $menu entryconfigure 8 -label [mc "Reset %s branch to here" $mainhead] -state normal
> +            $menu entryconfigure 9 -label [mc "Reset %s branch to here" $mainhead] -state normal
>           } else {
> -            $menu entryconfigure 8 -label [mc "Detached head: can't reset" $mainhead] -state disabled
> +            $menu entryconfigure 9 -label [mc "Detached head: can't reset" $mainhead] -state disabled
>           }
> -        $menu entryconfigure 10 -state $mstate
>           $menu entryconfigure 11 -state $mstate
>           $menu entryconfigure 12 -state $mstate
> +        $menu entryconfigure 13 -state $mstate
>       } else {
>           set menu $fakerowmenu
>       }
> @@ -9481,6 +9482,22 @@ proc copyreference {} {
>       clipboard append $reference
>   }
>   
> +proc highlightcommitname {} {
> +    global rowmenuid autosellen findstring gdttype
> +
> +    set format "%s"
> +    set cmd [list git show -s --pretty=format:$format --date=short]
> +    if {$autosellen < 40} {
> +        lappend cmd --abbrev=$autosellen
> +    }
> +    set reference [eval exec $cmd $rowmenuid]
> +    set findstring $reference
> +    set gdttype [mc "containing:"]
> +
> +    clipboard clear
> +    clipboard append $reference
> +}
> +
>   proc writecommit {} {
>       global rowmenuid wrcomtop commitinfo wrcomcmd NS
>   
Marc Branchaud· Mar 21, 2024, 15:51 UTC · re: Raphael Gallais-Pou · lore

Re: [PATCH] gitk: add "Hightlight commit name" menu entry

On 2024-01-30 03:53, Raphael Gallais-Pou wrote:
Show 8 quoted lines
> When working with diverged branches, some patches can appear several times
> on different branches without having the need to merge those branches.
> On the other hand you may have to port a specific patch on another
> branch you are working on. The search with a SHA1 cannot be applied here
> since they would differ.
> 
> This patch adds an entry in the main context menu to highlight every
> instance of a commit.
Thanks for working on gitk!

Unfortunately, I don't understand the description of your new option. How is this different from the existing "Find containing:" feature? Gitk can already highlights commits that match a specified string. Please explain what gitk does when this new option is selected.

Also, please explain how your code identifies "every instance" of a commit. When I think of a "commit instance" I think of the "git patch-id" command, which I don't see here.

(It looks to me like this is basically a shortcut to auto-fill gitk's "containing:" field with the subject line of the selected commit?)

Show 14 quoted lines
> Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
> ---
>   gitk-git/gitk | 23 ++++++++++++++++++++---
>   1 file changed, 20 insertions(+), 3 deletions(-)
> 
> diff --git a/gitk-git/gitk b/gitk-git/gitk
> index 7a087f123d..4b15230a16 100755
> --- a/gitk-git/gitk
> +++ b/gitk-git/gitk
> @@ -2672,6 +2672,7 @@ proc makewindow {} {
>           {mc "Make patch" command mkpatch}
>           {mc "Create tag" command mktag}
>           {mc "Copy commit reference" command copyreference}
> +	{mc "Highlight commit name" command highlightcommitname}
This line is indented with a tab, but it should use spaces.
Show 29 quoted lines
>           {mc "Write commit to file" command writecommit}
>           {mc "Create new branch" command mkbranch}
>           {mc "Cherry-pick this commit" command cherrypick}
> @@ -9002,13 +9003,13 @@ proc rowmenu {x y id} {
>       if {$id ne $nullid && $id ne $nullid2} {
>           set menu $rowctxmenu
>           if {$mainhead ne {}} {
> -            $menu entryconfigure 8 -label [mc "Reset %s branch to here" $mainhead] -state normal
> +            $menu entryconfigure 9 -label [mc "Reset %s branch to here" $mainhead] -state normal
>           } else {
> -            $menu entryconfigure 8 -label [mc "Detached head: can't reset" $mainhead] -state disabled
> +            $menu entryconfigure 9 -label [mc "Detached head: can't reset" $mainhead] -state disabled
>           }
> -        $menu entryconfigure 10 -state $mstate
>           $menu entryconfigure 11 -state $mstate
>           $menu entryconfigure 12 -state $mstate
> +        $menu entryconfigure 13 -state $mstate
>       } else {
>           set menu $fakerowmenu
>       }
> @@ -9481,6 +9482,22 @@ proc copyreference {} {
>       clipboard append $reference
>   }
>   
> +proc highlightcommitname {} {
> +    global rowmenuid autosellen findstring gdttype
> +
> +    set format "%s"
> +    set cmd [list git show -s --pretty=format:$format --date=short]
Why bother with the $format variable here?  Couldn't you just quote the 
--pretty part?
	"--pretty=format:%s"
(FYI, I am not a TCL/TK coder.)
		M.
Show 14 quoted lines
> +    if {$autosellen < 40} {
> +        lappend cmd --abbrev=$autosellen
> +    }
> +    set reference [eval exec $cmd $rowmenuid]
> +    set findstring $reference
> +    set gdttype [mc "containing:"]
> +
> +    clipboard clear
> +    clipboard append $reference
> +}
> +
>   proc writecommit {} {
>       global rowmenuid wrcomtop commitinfo wrcomcmd NS
>   
Raphaël Gallais-Pou· Mar 23, 2024, 09:45 UTC · re: Marc Branchaud · lore

Re: [PATCH] gitk: add "Hightlight commit name" menu entry

Hi Marc,
Le 21/03/2024 à 16:51, Marc Branchaud a écrit :
Show 22 quoted lines
> 
> On 2024-01-30 03:53, Raphael Gallais-Pou wrote:
>> When working with diverged branches, some patches can appear several 
>> times
>> on different branches without having the need to merge those branches.
>> On the other hand you may have to port a specific patch on another
>> branch you are working on. The search with a SHA1 cannot be applied here
>> since they would differ.
>>
>> This patch adds an entry in the main context menu to highlight every
>> instance of a commit.
> 
> Thanks for working on gitk!
> 
> Unfortunately, I don't understand the description of your new option. 
> How is this different from the existing "Find containing:" feature? Gitk 
> can already highlights commits that match a specified string. Please 
> explain what gitk does when this new option is selected.
> 
> Also, please explain how your code identifies "every instance" of a 
> commit.  When I think of a "commit instance" I think of the
> "git patch-id" command, which I don't see here.

It is based on the name of the commit. I agree that it is not ideal since the name can change between two versions.

As you stated below it is exactly a shortcut, and now that we are talking about it I think this is not the right right approach to do what I want.

I was not aware of the 'git patch-id' command, but this it clearly a better idea to base the search of the commit instances on it.

One thing that I wonder is that 'git patch-id' seems to be based on standard input. This means that in order to highlight every instances of a commit the algorithm would need to parse each and every patch and then proceed to hash them and compare to the one referenced.

Wouldn't it be a tad long to process ?
Show 20 quoted lines
> 
> (It looks to me like this is basically a shortcut to auto-fill gitk's 
> "containing:" field with the subject line of the selected commit?)
> 
>> Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
>> ---
>>   gitk-git/gitk | 23 ++++++++++++++++++++---
>>   1 file changed, 20 insertions(+), 3 deletions(-)
>>
>> diff --git a/gitk-git/gitk b/gitk-git/gitk
>> index 7a087f123d..4b15230a16 100755
>> --- a/gitk-git/gitk
>> +++ b/gitk-git/gitk
>> @@ -2672,6 +2672,7 @@ proc makewindow {} {
>>           {mc "Make patch" command mkpatch}
>>           {mc "Create tag" command mktag}
>>           {mc "Copy commit reference" command copyreference}
>> +    {mc "Highlight commit name" command highlightcommitname}
> 
> This line is indented with a tab, but it should use spaces.
I will change my setup to use spaces instead of tabs one this file.
Show 38 quoted lines
> 
>>           {mc "Write commit to file" command writecommit}
>>           {mc "Create new branch" command mkbranch}
>>           {mc "Cherry-pick this commit" command cherrypick}
>> @@ -9002,13 +9003,13 @@ proc rowmenu {x y id} {
>>       if {$id ne $nullid && $id ne $nullid2} {
>>           set menu $rowctxmenu
>>           if {$mainhead ne {}} {
>> -            $menu entryconfigure 8 -label [mc "Reset %s branch to 
>> here" $mainhead] -state normal
>> +            $menu entryconfigure 9 -label [mc "Reset %s branch to 
>> here" $mainhead] -state normal
>>           } else {
>> -            $menu entryconfigure 8 -label [mc "Detached head: can't 
>> reset" $mainhead] -state disabled
>> +            $menu entryconfigure 9 -label [mc "Detached head: can't 
>> reset" $mainhead] -state disabled
>>           }
>> -        $menu entryconfigure 10 -state $mstate
>>           $menu entryconfigure 11 -state $mstate
>>           $menu entryconfigure 12 -state $mstate
>> +        $menu entryconfigure 13 -state $mstate
>>       } else {
>>           set menu $fakerowmenu
>>       }
>> @@ -9481,6 +9482,22 @@ proc copyreference {} {
>>       clipboard append $reference
>>   }
>> +proc highlightcommitname {} {
>> +    global rowmenuid autosellen findstring gdttype
>> +
>> +    set format "%s"
>> +    set cmd [list git show -s --pretty=format:$format --date=short]
> 
> Why bother with the $format variable here?  Couldn't you just quote the 
> --pretty part?
>      "--pretty=format:%s"
> (FYI, I am not a TCL/TK coder.)

I also am not a TCL developer. I pretty much duplicated the copyreference{} procedure to get what I wanted.

Best regards, Raphaël

Show 16 quoted lines
> 
>          M.
> 
>> +    if {$autosellen < 40} {
>> +        lappend cmd --abbrev=$autosellen
>> +    }
>> +    set reference [eval exec $cmd $rowmenuid]
>> +    set findstring $reference
>> +    set gdttype [mc "containing:"]
>> +
>> +    clipboard clear
>> +    clipboard append $reference
>> +}
>> +
>>   proc writecommit {} {
>>       global rowmenuid wrcomtop commitinfo wrcomcmd NS
Marc Branchaud· Mar 25, 2024, 12:52 UTC · re: Raphaël Gallais-Pou · lore

Re: [PATCH] gitk: add "Hightlight commit name" menu entry

On 2024-03-23 05:45, Raphaël Gallais-Pou wrote:
Show 28 quoted lines
> Hi Marc,
> 
> Le 21/03/2024 à 16:51, Marc Branchaud a écrit :
>>
>> On 2024-01-30 03:53, Raphael Gallais-Pou wrote:
>>> When working with diverged branches, some patches can appear several 
>>> times
>>> on different branches without having the need to merge those branches.
>>> On the other hand you may have to port a specific patch on another
>>> branch you are working on. The search with a SHA1 cannot be applied here
>>> since they would differ.
>>>
>>> This patch adds an entry in the main context menu to highlight every
>>> instance of a commit.
>>
>> Thanks for working on gitk!
>>
>> Unfortunately, I don't understand the description of your new option. 
>> How is this different from the existing "Find containing:" feature? 
>> Gitk can already highlights commits that match a specified string. 
>> Please explain what gitk does when this new option is selected.
>>
>> Also, please explain how your code identifies "every instance" of a 
>> commit.  When I think of a "commit instance" I think of the
>> "git patch-id" command, which I don't see here.
> 
> It is based on the name of the commit. I agree that it is not ideal 
> since the name can change between two versions.
Thanks for clarifying that.

(BTW, on this list we pronounce "the name of the commit" as "the commit subject (line)".)

Show 13 quoted lines
> As you stated below it is exactly a shortcut, and now that we are 
> talking about it I think this is not the right right approach to do what 
> I want.
> 
> I was not aware of the 'git patch-id' command, but this it clearly a 
> better idea to base the search of the commit instances on it.
> 
> One thing that I wonder is that 'git patch-id' seems to be based on 
> standard input. This means that in order to highlight every instances of 
> a commit the algorithm would need to parse each and every patch and then 
> proceed to hash them and compare to the one referenced.
> 
> Wouldn't it be a tad long to process ?
Absolutely.  Maybe "git cherry" would be more appropriate?
		M.
Show 82 quoted lines
>> (It looks to me like this is basically a shortcut to auto-fill gitk's 
>> "containing:" field with the subject line of the selected commit?)
>>
>>> Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
>>> ---
>>>   gitk-git/gitk | 23 ++++++++++++++++++++---
>>>   1 file changed, 20 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/gitk-git/gitk b/gitk-git/gitk
>>> index 7a087f123d..4b15230a16 100755
>>> --- a/gitk-git/gitk
>>> +++ b/gitk-git/gitk
>>> @@ -2672,6 +2672,7 @@ proc makewindow {} {
>>>           {mc "Make patch" command mkpatch}
>>>           {mc "Create tag" command mktag}
>>>           {mc "Copy commit reference" command copyreference}
>>> +    {mc "Highlight commit name" command highlightcommitname}
>>
>> This line is indented with a tab, but it should use spaces.
> 
> I will change my setup to use spaces instead of tabs one this file.
> 
>>
>>>           {mc "Write commit to file" command writecommit}
>>>           {mc "Create new branch" command mkbranch}
>>>           {mc "Cherry-pick this commit" command cherrypick}
>>> @@ -9002,13 +9003,13 @@ proc rowmenu {x y id} {
>>>       if {$id ne $nullid && $id ne $nullid2} {
>>>           set menu $rowctxmenu
>>>           if {$mainhead ne {}} {
>>> -            $menu entryconfigure 8 -label [mc "Reset %s branch to 
>>> here" $mainhead] -state normal
>>> +            $menu entryconfigure 9 -label [mc "Reset %s branch to 
>>> here" $mainhead] -state normal
>>>           } else {
>>> -            $menu entryconfigure 8 -label [mc "Detached head: can't 
>>> reset" $mainhead] -state disabled
>>> +            $menu entryconfigure 9 -label [mc "Detached head: can't 
>>> reset" $mainhead] -state disabled
>>>           }
>>> -        $menu entryconfigure 10 -state $mstate
>>>           $menu entryconfigure 11 -state $mstate
>>>           $menu entryconfigure 12 -state $mstate
>>> +        $menu entryconfigure 13 -state $mstate
>>>       } else {
>>>           set menu $fakerowmenu
>>>       }
>>> @@ -9481,6 +9482,22 @@ proc copyreference {} {
>>>       clipboard append $reference
>>>   }
>>> +proc highlightcommitname {} {
>>> +    global rowmenuid autosellen findstring gdttype
>>> +
>>> +    set format "%s"
>>> +    set cmd [list git show -s --pretty=format:$format --date=short]
>>
>> Why bother with the $format variable here?  Couldn't you just quote 
>> the --pretty part?
>>      "--pretty=format:%s"
>> (FYI, I am not a TCL/TK coder.)
> 
> I also am not a TCL developer. I pretty much duplicated the 
> copyreference{} procedure to get what I wanted.
> 
> Best regards,
> Raphaël
>>
>>          M.
>>
>>> +    if {$autosellen < 40} {
>>> +        lappend cmd --abbrev=$autosellen
>>> +    }
>>> +    set reference [eval exec $cmd $rowmenuid]
>>> +    set findstring $reference
>>> +    set gdttype [mc "containing:"]
>>> +
>>> +    clipboard clear
>>> +    clipboard append $reference
>>> +}
>>> +
>>>   proc writecommit {} {
>>>       global rowmenuid wrcomtop commitinfo wrcomcmd NS
Junio C Hamano· Mar 25, 2024, 18:56 UTC · re: Marc Branchaud · lore

Re: [PATCH] gitk: add "Hightlight commit name" menu entry

Marc Branchaud <marcnarc@xiplink.com> writes:
> (BTW, on this list we pronounce "the name of the commit" as "the
> commit subject (line)".)

Yup. "subject" probably comes from the fact that the title (the first paragraph, folded into a single line) of the commit is used on the "Subject:" header when formatted for e-mail submission, and also 's' in "git log --pretty='%s'" is described as "subject" in the documentation. Other words I've seen used are "commit title" and "oneline description", but "subject" would be the most common, I suspect.

"commit name" on the other hand brings a different concept, i.e., "the commit object name", more strongly to readers' minds, and can be mistaken as what you'd get in "git log --pretty='%H'".

← back to recent threads