mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-17 01:42:45 +02:00
Check for staged files for "Amend commit" and "Create fixup commit" (#2970)
This commit is contained in:
@ -615,19 +615,13 @@ func (self *FilesController) refresh() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *FilesController) handleAmendCommitPress() error {
|
func (self *FilesController) handleAmendCommitPress() error {
|
||||||
if len(self.c.Model().Files) == 0 {
|
return self.c.Helpers().WorkingTree.WithEnsureCommitableFiles(func() error {
|
||||||
return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle)
|
if len(self.c.Model().Commits) == 0 {
|
||||||
}
|
return self.c.ErrorMsg(self.c.Tr.NoCommitToAmend)
|
||||||
|
}
|
||||||
|
|
||||||
if !self.c.Helpers().WorkingTree.AnyStagedFiles() {
|
return self.c.Helpers().AmendHelper.AmendHead()
|
||||||
return self.c.Helpers().WorkingTree.PromptToStageAllAndRetry(self.handleAmendCommitPress)
|
})
|
||||||
}
|
|
||||||
|
|
||||||
if len(self.c.Model().Commits) == 0 {
|
|
||||||
return self.c.ErrorMsg(self.c.Tr.NoCommitToAmend)
|
|
||||||
}
|
|
||||||
|
|
||||||
return self.c.Helpers().AmendHelper.AmendHead()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *FilesController) handleStatusFilterPressed() error {
|
func (self *FilesController) handleStatusFilterPressed() error {
|
||||||
|
@ -84,29 +84,19 @@ func (self *WorkingTreeHelper) OpenMergeTool() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *WorkingTreeHelper) HandleCommitPressWithMessage(initialMessage string) error {
|
func (self *WorkingTreeHelper) HandleCommitPressWithMessage(initialMessage string) error {
|
||||||
if err := self.prepareFilesForCommit(); err != nil {
|
return self.WithEnsureCommitableFiles(func() error {
|
||||||
return self.c.Error(err)
|
return self.commitsHelper.OpenCommitMessagePanel(
|
||||||
}
|
&OpenCommitMessagePanelOpts{
|
||||||
|
CommitIndex: context.NoCommitIndex,
|
||||||
if len(self.c.Model().Files) == 0 {
|
InitialMessage: initialMessage,
|
||||||
return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle)
|
SummaryTitle: self.c.Tr.CommitSummaryTitle,
|
||||||
}
|
DescriptionTitle: self.c.Tr.CommitDescriptionTitle,
|
||||||
|
PreserveMessage: true,
|
||||||
if !self.AnyStagedFiles() {
|
OnConfirm: self.handleCommit,
|
||||||
return self.PromptToStageAllAndRetry(self.HandleCommitPress)
|
OnSwitchToEditor: self.switchFromCommitMessagePanelToEditor,
|
||||||
}
|
},
|
||||||
|
)
|
||||||
return self.commitsHelper.OpenCommitMessagePanel(
|
})
|
||||||
&OpenCommitMessagePanelOpts{
|
|
||||||
CommitIndex: context.NoCommitIndex,
|
|
||||||
InitialMessage: initialMessage,
|
|
||||||
SummaryTitle: self.c.Tr.CommitSummaryTitle,
|
|
||||||
DescriptionTitle: self.c.Tr.CommitDescriptionTitle,
|
|
||||||
PreserveMessage: true,
|
|
||||||
OnConfirm: self.handleCommit,
|
|
||||||
OnSwitchToEditor: self.switchFromCommitMessagePanelToEditor,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *WorkingTreeHelper) handleCommit(summary string, description string) error {
|
func (self *WorkingTreeHelper) handleCommit(summary string, description string) error {
|
||||||
@ -136,18 +126,12 @@ func (self *WorkingTreeHelper) switchFromCommitMessagePanelToEditor(filepath str
|
|||||||
// HandleCommitEditorPress - handle when the user wants to commit changes via
|
// HandleCommitEditorPress - handle when the user wants to commit changes via
|
||||||
// their editor rather than via the popup panel
|
// their editor rather than via the popup panel
|
||||||
func (self *WorkingTreeHelper) HandleCommitEditorPress() error {
|
func (self *WorkingTreeHelper) HandleCommitEditorPress() error {
|
||||||
if len(self.c.Model().Files) == 0 {
|
return self.WithEnsureCommitableFiles(func() error {
|
||||||
return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle)
|
self.c.LogAction(self.c.Tr.Actions.Commit)
|
||||||
}
|
return self.c.RunSubprocessAndRefresh(
|
||||||
|
self.c.Git().Commit.CommitEditorCmdObj(),
|
||||||
if !self.AnyStagedFiles() {
|
)
|
||||||
return self.PromptToStageAllAndRetry(self.HandleCommitEditorPress)
|
})
|
||||||
}
|
|
||||||
|
|
||||||
self.c.LogAction(self.c.Tr.Actions.Commit)
|
|
||||||
return self.c.RunSubprocessAndRefresh(
|
|
||||||
self.c.Git().Commit.CommitEditorCmdObj(),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *WorkingTreeHelper) HandleWIPCommitPress() error {
|
func (self *WorkingTreeHelper) HandleWIPCommitPress() error {
|
||||||
@ -179,7 +163,23 @@ func (self *WorkingTreeHelper) HandleCommitPress() error {
|
|||||||
return self.HandleCommitPressWithMessage(message)
|
return self.HandleCommitPressWithMessage(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *WorkingTreeHelper) PromptToStageAllAndRetry(retry func() error) error {
|
func (self *WorkingTreeHelper) WithEnsureCommitableFiles(handler func() error) error {
|
||||||
|
if err := self.prepareFilesForCommit(); err != nil {
|
||||||
|
return self.c.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(self.c.Model().Files) == 0 {
|
||||||
|
return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !self.AnyStagedFiles() {
|
||||||
|
return self.promptToStageAllAndRetry(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
return handler()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *WorkingTreeHelper) promptToStageAllAndRetry(retry func() error) error {
|
||||||
return self.c.Confirm(types.ConfirmOpts{
|
return self.c.Confirm(types.ConfirmOpts{
|
||||||
Title: self.c.Tr.NoFilesStagedTitle,
|
Title: self.c.Tr.NoFilesStagedTitle,
|
||||||
Prompt: self.c.Tr.NoFilesStagedPrompt,
|
Prompt: self.c.Tr.NoFilesStagedPrompt,
|
||||||
|
@ -568,10 +568,12 @@ func (self *LocalCommitsController) moveUp(commit *models.Commit) error {
|
|||||||
|
|
||||||
func (self *LocalCommitsController) amendTo(commit *models.Commit) error {
|
func (self *LocalCommitsController) amendTo(commit *models.Commit) error {
|
||||||
if self.isHeadCommit() {
|
if self.isHeadCommit() {
|
||||||
if err := self.c.Helpers().AmendHelper.AmendHead(); err != nil {
|
return self.c.Helpers().WorkingTree.WithEnsureCommitableFiles(func() error {
|
||||||
return err
|
if err := self.c.Helpers().AmendHelper.AmendHead(); err != nil {
|
||||||
}
|
return err
|
||||||
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
|
}
|
||||||
|
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.c.Git().Status.WorkingTreeState() != enums.REBASE_MODE_NONE {
|
if self.c.Git().Status.WorkingTreeState() != enums.REBASE_MODE_NONE {
|
||||||
@ -582,10 +584,12 @@ func (self *LocalCommitsController) amendTo(commit *models.Commit) error {
|
|||||||
Title: self.c.Tr.AmendCommitTitle,
|
Title: self.c.Tr.AmendCommitTitle,
|
||||||
Prompt: self.c.Tr.AmendCommitPrompt,
|
Prompt: self.c.Tr.AmendCommitPrompt,
|
||||||
HandleConfirm: func() error {
|
HandleConfirm: func() error {
|
||||||
return self.c.WithWaitingStatus(self.c.Tr.AmendingStatus, func(gocui.Task) error {
|
return self.c.Helpers().WorkingTree.WithEnsureCommitableFiles(func() error {
|
||||||
self.c.LogAction(self.c.Tr.Actions.AmendCommit)
|
return self.c.WithWaitingStatus(self.c.Tr.AmendingStatus, func(gocui.Task) error {
|
||||||
err := self.c.Git().Rebase.AmendTo(self.c.Model().Commits, self.context().GetView().SelectedLineIdx())
|
self.c.LogAction(self.c.Tr.Actions.AmendCommit)
|
||||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err)
|
err := self.c.Git().Rebase.AmendTo(self.c.Model().Commits, self.context().GetView().SelectedLineIdx())
|
||||||
|
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -709,12 +713,14 @@ func (self *LocalCommitsController) createFixupCommit(commit *models.Commit) err
|
|||||||
Title: self.c.Tr.CreateFixupCommit,
|
Title: self.c.Tr.CreateFixupCommit,
|
||||||
Prompt: prompt,
|
Prompt: prompt,
|
||||||
HandleConfirm: func() error {
|
HandleConfirm: func() error {
|
||||||
self.c.LogAction(self.c.Tr.Actions.CreateFixupCommit)
|
return self.c.Helpers().WorkingTree.WithEnsureCommitableFiles(func() error {
|
||||||
if err := self.c.Git().Commit.CreateFixupCommit(commit.Sha); err != nil {
|
self.c.LogAction(self.c.Tr.Actions.CreateFixupCommit)
|
||||||
return self.c.Error(err)
|
if err := self.c.Git().Commit.CreateFixupCommit(commit.Sha); err != nil {
|
||||||
}
|
return self.c.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
|
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
|
||||||
|
})
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user