mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-02-09 13:47:11 +02:00
Better error message when trying to edit or move a non-todo commit during rebase
Previously we would have tried to do the rebase, resulting in a long and somewhat cryptic error message from git; now we check ourselves and show a less intimidating message.
This commit is contained in:
parent
b24955063c
commit
c757063264
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/commands/types/enums"
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/context"
|
"github.com/jesseduffield/lazygit/pkg/gui/context"
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||||
@ -327,6 +328,14 @@ func (self *LocalCommitsController) interactiveRebase(action string) error {
|
|||||||
// begin a rebase. It then updates the todo file with that action
|
// begin a rebase. It then updates the todo file with that action
|
||||||
func (self *LocalCommitsController) handleMidRebaseCommand(action string, commit *models.Commit) (bool, error) {
|
func (self *LocalCommitsController) handleMidRebaseCommand(action string, commit *models.Commit) (bool, error) {
|
||||||
if !commit.IsTODO() {
|
if !commit.IsTODO() {
|
||||||
|
if self.git.Status.WorkingTreeState() != enums.REBASE_MODE_NONE {
|
||||||
|
// If we are in a rebase, the only action that is allowed for
|
||||||
|
// non-todo commits is rewording the current head commit
|
||||||
|
if !(action == "reword" && self.isHeadCommit()) {
|
||||||
|
return true, self.c.ErrorMsg(self.c.Tr.AlreadyRebasing)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,6 +392,10 @@ func (self *LocalCommitsController) moveDown(commit *models.Commit) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.git.Status.WorkingTreeState() != enums.REBASE_MODE_NONE {
|
||||||
|
return self.c.ErrorMsg(self.c.Tr.AlreadyRebasing)
|
||||||
|
}
|
||||||
|
|
||||||
return self.c.WithWaitingStatus(self.c.Tr.MovingStatus, func() error {
|
return self.c.WithWaitingStatus(self.c.Tr.MovingStatus, func() error {
|
||||||
self.c.LogAction(self.c.Tr.Actions.MoveCommitDown)
|
self.c.LogAction(self.c.Tr.Actions.MoveCommitDown)
|
||||||
err := self.git.Rebase.MoveCommitDown(self.model.Commits, index)
|
err := self.git.Rebase.MoveCommitDown(self.model.Commits, index)
|
||||||
@ -417,6 +430,10 @@ func (self *LocalCommitsController) moveUp(commit *models.Commit) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.git.Status.WorkingTreeState() != enums.REBASE_MODE_NONE {
|
||||||
|
return self.c.ErrorMsg(self.c.Tr.AlreadyRebasing)
|
||||||
|
}
|
||||||
|
|
||||||
return self.c.WithWaitingStatus(self.c.Tr.MovingStatus, func() error {
|
return self.c.WithWaitingStatus(self.c.Tr.MovingStatus, func() error {
|
||||||
self.c.LogAction(self.c.Tr.Actions.MoveCommitUp)
|
self.c.LogAction(self.c.Tr.Actions.MoveCommitUp)
|
||||||
err := self.git.Rebase.MoveCommitDown(self.model.Commits, index-1)
|
err := self.git.Rebase.MoveCommitDown(self.model.Commits, index-1)
|
||||||
|
@ -190,6 +190,7 @@ type TranslationSet struct {
|
|||||||
PickAllHunks string
|
PickAllHunks string
|
||||||
ViewMergeRebaseOptions string
|
ViewMergeRebaseOptions string
|
||||||
NotMergingOrRebasing string
|
NotMergingOrRebasing string
|
||||||
|
AlreadyRebasing string
|
||||||
RecentRepos string
|
RecentRepos string
|
||||||
MergeOptionsTitle string
|
MergeOptionsTitle string
|
||||||
RebaseOptionsTitle string
|
RebaseOptionsTitle string
|
||||||
@ -839,6 +840,7 @@ func EnglishTranslationSet() TranslationSet {
|
|||||||
PickAllHunks: "pick all hunks",
|
PickAllHunks: "pick all hunks",
|
||||||
ViewMergeRebaseOptions: "view merge/rebase options",
|
ViewMergeRebaseOptions: "view merge/rebase options",
|
||||||
NotMergingOrRebasing: "You are currently neither rebasing nor merging",
|
NotMergingOrRebasing: "You are currently neither rebasing nor merging",
|
||||||
|
AlreadyRebasing: "Can't perform this action during a rebase",
|
||||||
RecentRepos: "recent repositories",
|
RecentRepos: "recent repositories",
|
||||||
MergeOptionsTitle: "Merge Options",
|
MergeOptionsTitle: "Merge Options",
|
||||||
RebaseOptionsTitle: "Rebase Options",
|
RebaseOptionsTitle: "Rebase Options",
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package interactive_rebase
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/config"
|
||||||
|
. "github.com/jesseduffield/lazygit/pkg/integration/components"
|
||||||
|
)
|
||||||
|
|
||||||
|
var EditNonTodoCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
|
||||||
|
Description: "Tries to edit a non-todo commit while already rebasing, resulting in an error message",
|
||||||
|
ExtraCmdArgs: "",
|
||||||
|
Skip: false,
|
||||||
|
SetupConfig: func(config *config.AppConfig) {},
|
||||||
|
SetupRepo: func(shell *Shell) {
|
||||||
|
shell.
|
||||||
|
CreateNCommits(2)
|
||||||
|
},
|
||||||
|
Run: func(t *TestDriver, keys config.KeybindingConfig) {
|
||||||
|
t.Views().Commits().
|
||||||
|
Focus().
|
||||||
|
Lines(
|
||||||
|
Contains("commit 02").IsSelected(),
|
||||||
|
Contains("commit 01"),
|
||||||
|
).
|
||||||
|
Press(keys.Universal.Edit).
|
||||||
|
Lines(
|
||||||
|
Contains("<-- YOU ARE HERE --- commit 02"),
|
||||||
|
Contains("commit 01"),
|
||||||
|
).
|
||||||
|
NavigateToLine(Contains("commit 01")).
|
||||||
|
Press(keys.Universal.Edit)
|
||||||
|
|
||||||
|
t.ExpectPopup().Alert().
|
||||||
|
Title(Equals("Error")).
|
||||||
|
Content(Contains("Can't perform this action during a rebase")).
|
||||||
|
Confirm()
|
||||||
|
},
|
||||||
|
})
|
@ -83,6 +83,7 @@ var tests = []*components.IntegrationTest{
|
|||||||
interactive_rebase.AmendFirstCommit,
|
interactive_rebase.AmendFirstCommit,
|
||||||
interactive_rebase.AmendMerge,
|
interactive_rebase.AmendMerge,
|
||||||
interactive_rebase.EditFirstCommit,
|
interactive_rebase.EditFirstCommit,
|
||||||
|
interactive_rebase.EditNonTodoCommitDuringRebase,
|
||||||
interactive_rebase.FixupFirstCommit,
|
interactive_rebase.FixupFirstCommit,
|
||||||
interactive_rebase.FixupSecondCommit,
|
interactive_rebase.FixupSecondCommit,
|
||||||
interactive_rebase.Move,
|
interactive_rebase.Move,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user