mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-06-15 00:15:32 +02:00
Checkout worktree when creating from worktree view
This commit is contained in:
@ -20,8 +20,8 @@ func (gui *Gui) resetHelpersAndControllers() {
|
|||||||
helperCommon := gui.c
|
helperCommon := gui.c
|
||||||
recordDirectoryHelper := helpers.NewRecordDirectoryHelper(helperCommon)
|
recordDirectoryHelper := helpers.NewRecordDirectoryHelper(helperCommon)
|
||||||
reposHelper := helpers.NewRecentReposHelper(helperCommon, recordDirectoryHelper, gui.onNewRepo)
|
reposHelper := helpers.NewRecentReposHelper(helperCommon, recordDirectoryHelper, gui.onNewRepo)
|
||||||
worktreeHelper := helpers.NewWorktreeHelper(helperCommon, reposHelper)
|
|
||||||
refsHelper := helpers.NewRefsHelper(helperCommon)
|
refsHelper := helpers.NewRefsHelper(helperCommon)
|
||||||
|
worktreeHelper := helpers.NewWorktreeHelper(helperCommon, reposHelper, refsHelper)
|
||||||
|
|
||||||
rebaseHelper := helpers.NewMergeAndRebaseHelper(helperCommon, refsHelper)
|
rebaseHelper := helpers.NewMergeAndRebaseHelper(helperCommon, refsHelper)
|
||||||
suggestionsHelper := helpers.NewSuggestionsHelper(helperCommon)
|
suggestionsHelper := helpers.NewSuggestionsHelper(helperCommon)
|
||||||
|
@ -24,12 +24,14 @@ type IWorktreeHelper interface {
|
|||||||
type WorktreeHelper struct {
|
type WorktreeHelper struct {
|
||||||
c *HelperCommon
|
c *HelperCommon
|
||||||
reposHelper *ReposHelper
|
reposHelper *ReposHelper
|
||||||
|
refsHelper *RefsHelper
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWorktreeHelper(c *HelperCommon, reposHelper *ReposHelper) *WorktreeHelper {
|
func NewWorktreeHelper(c *HelperCommon, reposHelper *ReposHelper, refsHelper *RefsHelper) *WorktreeHelper {
|
||||||
return &WorktreeHelper{
|
return &WorktreeHelper{
|
||||||
c: c,
|
c: c,
|
||||||
reposHelper: reposHelper,
|
reposHelper: reposHelper,
|
||||||
|
refsHelper: refsHelper,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,30 +65,42 @@ func (self *WorktreeHelper) IsWorktreePathMissing(w *models.Worktree) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *WorktreeHelper) NewWorktree() error {
|
func (self *WorktreeHelper) NewWorktree() error {
|
||||||
return self.c.Prompt(types.PromptOpts{
|
// what is the current branch?
|
||||||
Title: self.c.Tr.NewWorktreePath,
|
branch := self.refsHelper.GetCheckedOutRef()
|
||||||
HandleConfirm: func(path string) error {
|
currentBranchName := branch.RefName()
|
||||||
return self.c.Prompt(types.PromptOpts{
|
|
||||||
Title: self.c.Tr.NewWorktreeBranch,
|
f := func(detached bool) error {
|
||||||
// TODO: suggestions
|
return self.c.Prompt(types.PromptOpts{
|
||||||
HandleConfirm: func(base string) error {
|
Title: self.c.Tr.NewWorktreeBranch,
|
||||||
return self.c.WithWaitingStatus(self.c.Tr.AddingWorktree, func(gocui.Task) error {
|
InitialContent: currentBranchName,
|
||||||
self.c.LogAction(self.c.Tr.Actions.AddWorktree)
|
// TODO: suggestions
|
||||||
if err := self.c.Git().Worktree.New(git_commands.NewWorktreeOpts{
|
HandleConfirm: func(base string) error {
|
||||||
Path: path,
|
canCheckoutBase := base != currentBranchName
|
||||||
Base: base,
|
return self.NewWorktreeCheckout(base, canCheckoutBase, detached)
|
||||||
}); err != nil {
|
},
|
||||||
return err
|
})
|
||||||
}
|
}
|
||||||
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.WORKTREES, types.BRANCHES, types.FILES}})
|
|
||||||
})
|
return self.c.Menu(types.CreateMenuOptions{
|
||||||
|
Title: self.c.Tr.WorktreeTitle,
|
||||||
|
Items: []*types.MenuItem{
|
||||||
|
{
|
||||||
|
LabelColumns: []string{"Create new worktree from ref"},
|
||||||
|
OnPress: func() error {
|
||||||
|
return f(false)
|
||||||
},
|
},
|
||||||
})
|
},
|
||||||
|
{
|
||||||
|
LabelColumns: []string{"Create new worktree from ref (detached)"},
|
||||||
|
OnPress: func() error {
|
||||||
|
return f(true)
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *WorktreeHelper) NewWorktreeCheckout(base string, isBranch bool, detached bool) error {
|
func (self *WorktreeHelper) NewWorktreeCheckout(base string, canCheckoutBase bool, detached bool) error {
|
||||||
opts := git_commands.NewWorktreeOpts{
|
opts := git_commands.NewWorktreeOpts{
|
||||||
Base: base,
|
Base: base,
|
||||||
Detach: detached,
|
Detach: detached,
|
||||||
@ -111,7 +125,7 @@ func (self *WorktreeHelper) NewWorktreeCheckout(base string, isBranch bool, deta
|
|||||||
return f()
|
return f()
|
||||||
}
|
}
|
||||||
|
|
||||||
if isBranch {
|
if canCheckoutBase {
|
||||||
// prompt for the new branch name where a blank means we just check out the branch
|
// prompt for the new branch name where a blank means we just check out the branch
|
||||||
return self.c.Prompt(types.PromptOpts{
|
return self.c.Prompt(types.PromptOpts{
|
||||||
Title: fmt.Sprintf("New branch name (leave blank to checkout %s)", base),
|
Title: fmt.Sprintf("New branch name (leave blank to checkout %s)", base),
|
||||||
|
Reference in New Issue
Block a user