summaryrefslogtreecommitdiffstats
path: root/pkg/gui/controllers/local_commits_controller.go
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2023-04-05 16:09:36 +0200
committerStefan Haller <stefan@haller-berlin.de>2023-04-15 08:36:03 +0200
commitd675eb65077fee840d2ed7b13a0ee038611664b6 (patch)
treed00d7786582818ec580d729693831dca1bcdb6ea /pkg/gui/controllers/local_commits_controller.go
parentdc4e88f8a48bd52160a76b79da56e13af7b9ffc0 (diff)
Don't allow changing the type of certain rebase todos
We already show "merge" todo entries when starting an interactive rebase with --rebase-merges outside of lazygit. Changing the type of a merge entry to "pick" or "edit" doesn't make sense and shouldn't be allowed. Earlier in this branch we have started to show "update-ref" entries, these can't be changed either (they can be moved, though). You might argue that it should be possible to change them to "drop", but in the case of "update-ref" this doesn't make sense either, because "drop" needs a Sha and we don't have one here. Also, you would then be able to later change it back to "pick", so we would have to remember that this isn't allowed for this particular drop entry; that's messy, so just disallow all editing.
Diffstat (limited to 'pkg/gui/controllers/local_commits_controller.go')
-rw-r--r--pkg/gui/controllers/local_commits_controller.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go
index 48fafd4e6..4610aed12 100644
--- a/pkg/gui/controllers/local_commits_controller.go
+++ b/pkg/gui/controllers/local_commits_controller.go
@@ -9,6 +9,7 @@ import (
"github.com/jesseduffield/lazygit/pkg/gui/context"
"github.com/jesseduffield/lazygit/pkg/gui/types"
"github.com/jesseduffield/lazygit/pkg/utils"
+ "github.com/samber/lo"
)
type (
@@ -348,6 +349,10 @@ func (self *LocalCommitsController) handleMidRebaseCommand(action todo.TodoComma
return true, self.c.ErrorMsg(self.c.Tr.LcRewordNotSupported)
}
+ if allowed := isChangeOfRebaseTodoAllowed(action); !allowed {
+ return true, self.c.ErrorMsg(self.c.Tr.LcChangingThisActionIsNotAllowed)
+ }
+
self.c.LogAction("Update rebase TODO")
self.c.LogCommand(
fmt.Sprintf("Updating rebase action of commit %s to '%s'", commit.ShortSha(), action.String()),
@@ -759,3 +764,16 @@ func (self *LocalCommitsController) paste() error {
func (self *LocalCommitsController) isHeadCommit() bool {
return models.IsHeadCommit(self.model.Commits, self.context().GetSelectedLineIdx())
}
+
+func isChangeOfRebaseTodoAllowed(action todo.TodoCommand) bool {
+ allowedActions := []todo.TodoCommand{
+ todo.Pick,
+ todo.Drop,
+ todo.Edit,
+ todo.Fixup,
+ todo.Squash,
+ todo.Reword,
+ }
+
+ return lo.Contains(allowedActions, action)
+}