diff --git a/pkg/gui/controllers/helpers/worktree_helper.go b/pkg/gui/controllers/helpers/worktree_helper.go index bdaf7d2f9..a05d469ce 100644 --- a/pkg/gui/controllers/helpers/worktree_helper.go +++ b/pkg/gui/controllers/helpers/worktree_helper.go @@ -7,6 +7,7 @@ import ( "log" "os" + "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/gui/types" ) @@ -62,11 +63,13 @@ func (self *WorktreeHelper) NewWorktree() error { return self.c.Prompt(types.PromptOpts{ Title: self.c.Tr.NewWorktreePath, HandleConfirm: func(committish string) error { - self.c.LogAction(self.c.Tr.Actions.CreateWorktree) - if err := self.c.Git().Worktree.New(sanitizedBranchName(path), committish); err != nil { - return err - } - return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) + return self.c.WithWaitingStatus(self.c.Tr.AddingWorktree, func(gocui.Task) error { + self.c.LogAction(self.c.Tr.Actions.AddWorktree) + if err := self.c.Git().Worktree.New(sanitizedBranchName(path), committish); err != nil { + return err + } + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) + }) }, }) }, diff --git a/pkg/gui/controllers/worktrees_controller.go b/pkg/gui/controllers/worktrees_controller.go index 0c515b564..c8b23f906 100644 --- a/pkg/gui/controllers/worktrees_controller.go +++ b/pkg/gui/controllers/worktrees_controller.go @@ -5,6 +5,7 @@ import ( "strings" "text/tabwriter" + "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/gui/context" "github.com/jesseduffield/lazygit/pkg/gui/style" @@ -37,12 +38,12 @@ func (self *WorktreesController) GetKeybindings(opts types.KeybindingsOpts) []*t }, { Key: opts.GetKey(opts.Config.Universal.Remove), - Handler: self.checkSelected(self.delete), - Description: self.c.Tr.DeleteWorktree, + Handler: self.checkSelected(self.remove), + Description: self.c.Tr.RemoveWorktree, }, { Key: opts.GetKey(opts.Config.Universal.New), - Handler: self.create, + Handler: self.add, Description: self.c.Tr.CreateWorktree, }, } @@ -87,11 +88,11 @@ func (self *WorktreesController) GetOnRenderToMain() func() error { } } -func (self *WorktreesController) create() error { +func (self *WorktreesController) add() error { return self.c.Helpers().Worktree.NewWorktree() } -func (self *WorktreesController) delete(worktree *models.Worktree) error { +func (self *WorktreesController) remove(worktree *models.Worktree) error { if worktree.Main() { return self.c.ErrorMsg(self.c.Tr.CantDeleteMainWorktree) } @@ -100,16 +101,16 @@ func (self *WorktreesController) delete(worktree *models.Worktree) error { return self.c.ErrorMsg(self.c.Tr.CantDeleteCurrentWorktree) } - return self.deleteWithForce(worktree, false) + return self.removeWithForce(worktree, false) } -func (self *WorktreesController) deleteWithForce(worktree *models.Worktree, force bool) error { - title := self.c.Tr.DeleteWorktreeTitle +func (self *WorktreesController) removeWithForce(worktree *models.Worktree, force bool) error { + title := self.c.Tr.RemoveWorktreeTitle var templateStr string if force { - templateStr = self.c.Tr.ForceDeleteWorktreePrompt + templateStr = self.c.Tr.ForceRemoveWorktreePrompt } else { - templateStr = self.c.Tr.DeleteWorktreePrompt + templateStr = self.c.Tr.RemoveWorktreePrompt } message := utils.ResolvePlaceholderString( templateStr, @@ -122,15 +123,17 @@ func (self *WorktreesController) deleteWithForce(worktree *models.Worktree, forc 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.WithWaitingStatus(self.c.Tr.RemovingWorktree, func(gocui.Task) error { + self.c.LogAction(self.c.Tr.RemovingWorktree) + if err := self.c.Git().Worktree.Delete(worktree.Path, force); err != nil { + errMessage := err.Error() + if !force { + return self.removeWithForce(worktree, true) + } + return self.c.ErrorMsg(errMessage) } - return self.c.ErrorMsg(errMessage) - } - return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.WORKTREES}}) + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.WORKTREES}}) + }) }, }) } diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 84581c0b6..049bf9e11 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -543,12 +543,14 @@ type TranslationSet struct { ExitSearchMode string ExitTextFilterMode string EnterWorktree string - DeleteWorktree string - DeleteWorktreeTitle string + RemoveWorktree string + RemoveWorktreeTitle string WorktreesTitle string WorktreeTitle string - DeleteWorktreePrompt string - ForceDeleteWorktreePrompt string + RemoveWorktreePrompt string + ForceRemoveWorktreePrompt string + RemovingWorktree string + AddingWorktree string CantDeleteCurrentWorktree string AlreadyInWorktree string CantDeleteMainWorktree string @@ -691,8 +693,8 @@ type Actions struct { ResetBisect string BisectSkip string BisectMark string - DeleteWorktree string - CreateWorktree string + RemoveWorktree string + AddWorktree string } const englishIntroPopupMessage = ` @@ -1265,13 +1267,15 @@ func EnglishTranslationSet() TranslationSet { WorktreesTitle: "Worktrees", WorktreeTitle: "Worktree", EnterWorktree: "Enter worktree", - DeleteWorktree: "Delete worktree", - DeleteWorktreeTitle: "Delete worktree", - DeleteWorktreePrompt: "Are you sure you want to delete worktree '{{.worktreeName}}'?", - ForceDeleteWorktreePrompt: "'{{.worktreeName}}' is not fully merged. Are you sure you want to delete it?", - CantDeleteCurrentWorktree: "You cannot delete the current worktree!", + RemoveWorktree: "Remove worktree", + RemoveWorktreeTitle: "Remove worktree", + RemoveWorktreePrompt: "Are you sure you want to remove worktree '{{.worktreeName}}'?", + ForceRemoveWorktreePrompt: "'{{.worktreeName}}' is not fully merged. Are you sure you want to remove it?", + RemovingWorktree: "Deleting worktree", + AddingWorktree: "Adding worktree", + CantDeleteCurrentWorktree: "You cannot remove the current worktree!", AlreadyInWorktree: "You are already in the selected worktree", - CantDeleteMainWorktree: "You cannot delete the main worktree!", + CantDeleteMainWorktree: "You cannot remove the main worktree!", NoWorktreesThisRepo: "No worktrees", MissingWorktree: "(missing)", MainWorktree: "(main)", @@ -1388,8 +1392,8 @@ func EnglishTranslationSet() TranslationSet { ResetBisect: "Reset bisect", BisectSkip: "Bisect skip", BisectMark: "Bisect mark", - DeleteWorktree: "Delete worktree", - CreateWorktree: "Create worktree", + RemoveWorktree: "Remove worktree", + AddWorktree: "Add worktree", }, Bisect: Bisect{ Mark: "Mark current commit (%s) as %s",