Re: [PATCH v2 07/10] gitk: add keyboard bind for cherry-pick command

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>> +        {mc "Create new branch" command {mkbranch $rowmenuid}}
>> +        {mc "Cherry-pick this commit" command {cherrypick $rowmenuid}}
> 
> The change regarding Create new branch is not related to this commit's
> topic and should be elsewhere.

Sorry, sloppy mistake, will fix, thanks.

>> +    if {! [info exists headids($mainhead)]} {
>> +        error_popup [mc "Cannot cherry-pick to a detached head"]
>> +        return
>> +    }
> 
> Why is it necessary to forbid this now? It was not forbidden before.

Oh, I had no idea you can actually cherry-pick to a detached head! When a added this check I though I fixed an existing bug, which only manifested if the user had checked out a detached head using the terminal and then used cherry-pick in gitk. I now see that it is not an error.

I have mixed feelings about allowing this, but it's probably best to not invent artificial limitations in gitk, so I'll remove the check.

/Jens

On 2023-07-05 22:07, Johannes Sixt wrote:
> Am 03.07.23 um 20:45 schrieb Jens Lidestrom via GitGitGadget:
>> From: Jens Lidestrom <jens@xxxxxxxxxxxx>
>>
>> Signed-off-by: Jens Lidestrom <jens@xxxxxxxxxxxx>
>> ---
>>  gitk-git/gitk | 23 +++++++++++++++--------
>>  1 file changed, 15 insertions(+), 8 deletions(-)
>>
>> diff --git a/gitk-git/gitk b/gitk-git/gitk
>> index 65ca11becca..351b88f10c0 100755
>> --- a/gitk-git/gitk
>> +++ b/gitk-git/gitk
>> @@ -2690,6 +2690,7 @@ proc makewindow {} {
>>      bind $ctext $ctxbut {pop_diff_menu %W %X %Y %x %y}
>>      bind $ctext <Button-1> {focus %W}
>>      bind $ctext <<Selection>> rehighlight_search_results
>> +    bind . <$M1B-p> {cherrypick [selected_line_id]}
>>      bind . <$M1B-t> {resethead [selected_line_id]}
>>      bind . <$M1B-o> {checkout [selected_line_heads] [selected_line_id]}
>>      bind . <$M1B-m> {rmbranch [selected_line_heads] [selected_line_id] 1}
>> @@ -2710,8 +2711,8 @@ proc makewindow {} {
>>          {mc "Create tag" command mktag}
>>          {mc "Copy commit reference" command copyreference}
>>          {mc "Write commit to file" command writecommit}
>> -        {mc "Create new branch" command mkbranch}
>> -        {mc "Cherry-pick this commit" command cherrypick}
>> +        {mc "Create new branch" command {mkbranch $rowmenuid}}
>> +        {mc "Cherry-pick this commit" command {cherrypick $rowmenuid}}
> 
> The change regarding Create new branch is not related to this commit's
> topic and should be elsewhere.
> 
>>          {mc "Reset current branch to here" command {resethead $rowmenuid}}
>>          {mc "Mark this commit" command markhere}
>>          {mc "Return to mark" command gotomark}
>> @@ -3186,6 +3187,7 @@ proc keys {} {
>>  [mc "<%s-minus>	Decrease font size" $M1T]
>>  [mc "<F5>		Update"]
>>  [mc "<%s-T>		Reset current branch to selected commit" $M1T]
>> +[mc "<%s-P>		Cherry-pick selected commit to current branch" $M1T]
>>  [mc "<%s-O>		Check out selected commit" $M1T]
>>  [mc "<%s-B>		Create branch on selected commit" $M1T]
>>  [mc "<%s-M>		Remove selected branch" $M1T]
>> @@ -9758,24 +9760,29 @@ proc exec_citool {tool_args {baseid {}}} {
>>      array set env $save_env
>>  }
>>  
>> -proc cherrypick {} {
>> -    global rowmenuid curview
>> +proc cherrypick {id} {
>> +    global curview headids
>>      global mainhead mainheadid
>>      global gitdir
>>  
>> +    if {! [info exists headids($mainhead)]} {
>> +        error_popup [mc "Cannot cherry-pick to a detached head"]
>> +        return
>> +    }
> 
> Why is it necessary to forbid this now? It was not forbidden before.
> 
>> +
>>      set oldhead [exec git rev-parse HEAD]
>> -    set dheads [descheads $rowmenuid]
>> +    set dheads [descheads $id]
>>      if {$dheads ne {} && [lsearch -exact $dheads $oldhead] >= 0} {
>>          set ok [confirm_popup [mc "Commit %s is already\
>>                  included in branch %s -- really re-apply it?" \
>> -                                   [string range $rowmenuid 0 7] $mainhead]]
>> +                                   [string range $id 0 7] $mainhead]]
>>          if {!$ok} return
>>      }
>>      nowbusy cherrypick [mc "Cherry-picking"]
>>      update
>>      # Unfortunately git-cherry-pick writes stuff to stderr even when
>>      # no error occurs, and exec takes that as an indication of error...
>> -    if {[catch {exec sh -c "git cherry-pick -r $rowmenuid 2>&1"} err]} {
>> +    if {[catch {exec sh -c "git cherry-pick -r $id 2>&1"} err]} {
>>          notbusy cherrypick
>>          if {[regexp -line \
>>                   {Entry '(.*)' (would be overwritten by merge|not uptodate)} \
>> @@ -9791,7 +9798,7 @@ proc cherrypick {} {
>>                          resolve it?"]]} {
>>                  # Force citool to read MERGE_MSG
>>                  file delete [file join $gitdir "GITGUI_MSG"]
>> -                exec_citool {} $rowmenuid
>> +                exec_citool {} $id
>>              }
>>          } else {
>>              error_popup $err
> 





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux