1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-07-30 03:23:08 +03:00

Support for deleting a worktree

This commit is contained in:
Joel Baranick
2022-09-01 17:58:36 -07:00
committed by Jesse Duffield
parent f8ba899b87
commit afc4aedd4f
4 changed files with 84 additions and 36 deletions

View File

@ -8,6 +8,7 @@ import (
"github.com/jesseduffield/lazygit/pkg/gui/context"
"github.com/jesseduffield/lazygit/pkg/gui/style"
"github.com/jesseduffield/lazygit/pkg/gui/types"
"github.com/jesseduffield/lazygit/pkg/utils"
)
type WorktreesController struct {
@ -33,27 +34,16 @@ func (self *WorktreesController) GetKeybindings(opts types.KeybindingsOpts) []*t
Handler: self.checkSelected(self.enter),
Description: self.c.Tr.EnterWorktree,
},
//{
// Key: opts.GetKey(opts.Config.Universal.Remove),
// Handler: self.withSelectedTag(self.delete),
// Description: self.c.Tr.LcDeleteTag,
//},
//{
// Key: opts.GetKey(opts.Config.Branches.PushTag),
// Handler: self.withSelectedTag(self.push),
// Description: self.c.Tr.LcPushTag,
//},
{
Key: opts.GetKey(opts.Config.Universal.Remove),
Handler: self.checkSelected(self.delete),
Description: self.c.Tr.DeleteWorktree,
},
//{
// Key: opts.GetKey(opts.Config.Universal.New),
// Handler: self.create,
// Description: self.c.Tr.LcCreateTag,
//},
//{
// Key: opts.GetKey(opts.Config.Commits.ViewResetOptions),
// Handler: self.withSelectedTag(self.createResetMenu),
// Description: self.c.Tr.LcViewResetOptions,
// OpensMenu: true,
//},
}
return bindings
@ -95,26 +85,50 @@ func (self *WorktreesController) GetOnRenderToMain() func() error {
// return gui.dispatchSwitchToRepo(submodule.Path, true)
//}
// func (self *WorktreesController) delete(tag *models.Tag) error {
// prompt := utils.ResolvePlaceholderString(
// self.c.Tr.DeleteTagPrompt,
// map[string]string{
// "tagName": tag.Name,
// },
// )
//
// return self.c.Confirm(types.ConfirmOpts{
// Title: self.c.Tr.DeleteTagTitle,
// Prompt: prompt,
// HandleConfirm: func() error {
// self.c.LogAction(self.c.Tr.Actions.DeleteTag)
// if err := self.git.Tag.Delete(tag.Name); err != nil {
// return self.c.Error(err)
// }
// return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.COMMITS, types.TAGS}})
// },
// })
// }
func (self *WorktreesController) delete(worktree *models.Worktree) error {
if worktree.Main {
return self.c.ErrorMsg(self.c.Tr.CantDeleteMainWorktree)
}
if worktree.Current {
return self.c.ErrorMsg(self.c.Tr.CantDeleteCurrentWorktree)
}
return self.deleteWithForce(worktree, false)
}
func (self *WorktreesController) deleteWithForce(worktree *models.Worktree, force bool) error {
title := self.c.Tr.DeleteWorktreeTitle
var templateStr string
if force {
templateStr = self.c.Tr.ForceDeleteWorktreePrompt
} else {
templateStr = self.c.Tr.DeleteWorktreePrompt
}
message := utils.ResolvePlaceholderString(
templateStr,
map[string]string{
"worktreeName": worktree.Name,
},
)
return self.c.Confirm(types.ConfirmOpts{
Title: title,
Prompt: message,
HandleConfirm: func() error {
self.c.LogAction(self.c.Tr.Actions.DeleteWorktree)
if err := self.c.Git().Worktree.Delete(worktree.Path, force); err != nil {
errMessage := err.Error()
if !force {
return self.deleteWithForce(worktree, true)
}
return self.c.ErrorMsg(errMessage)
}
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.WORKTREES}})
},
})
}
//
// func (self *WorktreesController) push(tag *models.Tag) error {
// title := utils.ResolvePlaceholderString(