diff options
author | Stefan Haller <stefan@haller-berlin.de> | 2023-03-20 13:13:43 +0100 |
---|---|---|
committer | Stefan Haller <stefan@haller-berlin.de> | 2023-04-01 08:16:15 +0200 |
commit | d508badd62c033a8906fa01ea205cdd906c05daa (patch) | |
tree | a3650a4a1e015674e777994f5d4cca908fca5fa6 | |
parent | e7d0116312ff3233ff19bc3b355e7cb5f7b570ac (diff) |
Better error message when trying to amend a commit other than head during rebase
-rw-r--r-- | pkg/gui/controllers/local_commits_controller.go | 4 | ||||
-rw-r--r-- | pkg/integration/tests/interactive_rebase/amend_non_head_commit_during_rebase.go | 43 | ||||
-rw-r--r-- | pkg/integration/tests/test_list.go | 1 |
3 files changed, 48 insertions, 0 deletions
diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go index 355e18b82..284534ffa 100644 --- a/pkg/gui/controllers/local_commits_controller.go +++ b/pkg/gui/controllers/local_commits_controller.go @@ -452,6 +452,10 @@ func (self *LocalCommitsController) amendTo(commit *models.Commit) error { return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) } + if self.git.Status.WorkingTreeState() != enums.REBASE_MODE_NONE { + return self.c.ErrorMsg(self.c.Tr.AlreadyRebasing) + } + return self.c.Confirm(types.ConfirmOpts{ Title: self.c.Tr.AmendCommitTitle, Prompt: self.c.Tr.AmendCommitPrompt, diff --git a/pkg/integration/tests/interactive_rebase/amend_non_head_commit_during_rebase.go b/pkg/integration/tests/interactive_rebase/amend_non_head_commit_during_rebase.go new file mode 100644 index 000000000..946b1e455 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/amend_non_head_commit_during_rebase.go @@ -0,0 +1,43 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var AmendNonHeadCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Tries to amend a commit that is not the head while already rebasing, resulting in an error message", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateNCommits(3) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ). + NavigateToLine(Contains("commit 02")). + Press(keys.Universal.Edit). + Lines( + Contains("commit 03"), + Contains("<-- YOU ARE HERE --- commit 02"), + Contains("commit 01"), + ) + + for _, commit := range []string{"commit 01", "commit 03"} { + t.Views().Commits(). + NavigateToLine(Contains(commit)). + Press(keys.Commits.AmendToCommit) + + t.ExpectPopup().Alert(). + Title(Equals("Error")). + Content(Contains("Can't perform this action during a rebase")). + Confirm() + } + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 75eaaec52..fae655cbc 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -84,6 +84,7 @@ var tests = []*components.IntegrationTest{ interactive_rebase.AmendFirstCommit, interactive_rebase.AmendHeadCommitDuringRebase, interactive_rebase.AmendMerge, + interactive_rebase.AmendNonHeadCommitDuringRebase, interactive_rebase.EditFirstCommit, interactive_rebase.EditNonTodoCommitDuringRebase, interactive_rebase.FixupFirstCommit, |