Re: [PATCH 5/9] gitk: add keyboard bind for checkout

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

 



I added a branch selection dialog to be be able to check out any branch on a selected commit, in the same way as for the remove branch command.

/Jens

On 2023-06-27 16:41, Jens Lidestrom via GitGitGadget wrote:
> From: Jens Lidestrom <jens@xxxxxxxxxxxx>
> 
> This also introduces the ability to check out detatched heads. This
> shouldn't result any problems, because gitk already works with
> detatched heads if they are checked out using the terminal.
> 
> Signed-off-by: Jens Lidestrom <jens@xxxxxxxxxxxx>
> ---
>  gitk-git/gitk | 28 ++++++++++++++++------------
>  1 file changed, 16 insertions(+), 12 deletions(-)
> 
> diff --git a/gitk-git/gitk b/gitk-git/gitk
> index bfe912983f4..596977abe89 100755
> --- a/gitk-git/gitk
> +++ b/gitk-git/gitk
> @@ -2691,6 +2691,7 @@ proc makewindow {} {
>      bind $ctext <Button-1> {focus %W}
>      bind $ctext <<Selection>> rehighlight_search_results
>      bind . <$M1B-t> {resethead [selected_line_id]}
> +    bind . <$M1B-o> {checkout [selected_line_head] [selected_line_id]}
>      for {set i 1} {$i < 10} {incr i} {
>          bind . <$M1B-Key-$i> [list go_to_parent $i]
>      }
> @@ -2707,7 +2708,7 @@ 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 "Create new branch" command {mkbranch $rowmenuid}}
>          {mc "Cherry-pick this commit" command cherrypick}
>          {mc "Reset current branch to here" command {resethead $rowmenuid}}
>          {mc "Mark this commit" command markhere}
> @@ -2732,7 +2733,7 @@ proc makewindow {} {
>  
>      set headctxmenu .headctxmenu
>      makemenu $headctxmenu {
> -        {mc "Check out this branch" command cobranch}
> +        {mc "Check out this branch" command {checkout $headmenuhead $headmenuid}}
>          {mc "Rename this branch" command mvbranch}
>          {mc "Remove this branch" command rmbranch}
>          {mc "Copy branch name" command {clipboard clear; clipboard append $headmenuhead}}
> @@ -3183,6 +3184,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-O>		Check out selected commit" $M1T]
>  " \
>              -justify left -bg $bgcolor -border 2 -relief groove
>      pack $w.m -side top -fill both -padx 2 -pady 2
> @@ -9978,25 +9980,26 @@ proc headmenu {x y id head} {
>      tk_popup $headctxmenu $x $y
>  }
>  
> -proc cobranch {} {
> -    global headmenuid headmenuhead headids
> +proc checkout {newhead newheadid} {
> +    global headids
>      global showlocalchanges
>  
>      # check the tree is clean first??
> -    set newhead $headmenuhead
> +
> +    # The ref is either the head, if it exists, or the ID
> +    set newheadref [expr {$newhead ne "" ? $newhead : $newheadid}]
> +
>      set command [list | git checkout]
>      if {[string match "remotes/*" $newhead]} {
>          set remote $newhead
>          set newhead [string range $newhead [expr [string last / $newhead] + 1] end]
> -        # The following check is redundant - the menu option should
> -        # be disabled to begin with...
>          if {[info exists headids($newhead)]} {
>              error_popup [mc "A local branch named %s exists already" $newhead]
>              return
>          }
>          lappend command -b $newhead --track $remote
>      } else {
> -        lappend command $newhead
> +        lappend command $newheadref
>      }
>      lappend command 2>@1
>      nowbusy checkout [mc "Checking out"]
> @@ -10011,11 +10014,11 @@ proc cobranch {} {
>              dodiffindex
>          }
>      } else {
> -        filerun $fd [list readcheckoutstat $fd $newhead $headmenuid]
> +        filerun $fd [list readcheckoutstat $fd $newhead $newheadref $newheadid]
>      }
>  }
>  
> -proc readcheckoutstat {fd newhead newheadid} {
> +proc readcheckoutstat {fd newhead newheadref newheadid} {
>      global mainhead mainheadid headids idheads showlocalchanges progresscoords
>      global viewmainheadid curview
>  
> @@ -10034,12 +10037,13 @@ proc readcheckoutstat {fd newhead newheadid} {
>          return
>      }
>      set oldmainid $mainheadid
> -    if {! [info exists headids($newhead)]} {
> +
> +    if {$newhead ne "" && ! [info exists headids($newhead)]} {
>          set headids($newhead) $newheadid
>          lappend idheads($newheadid) $newhead
>          addedhead $newheadid $newhead
>      }
> -    set mainhead $newhead
> +    set mainhead $newheadref
>      set mainheadid $newheadid
>      set viewmainheadid($curview) $newheadid
>      redrawtags $oldmainid



[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