1
0
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:
Stefan Haller
2023-08-29 09:23:45 +02:00
committed by GitHub
3 changed files with 61 additions and 61 deletions

View File

@ -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 {

View File

@ -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,

View File

@ -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})
})
}, },
}) })
} }