Skip to content

Commit

Permalink
Don't allow changing the type of certain rebase todos
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
stefanhaller committed Apr 15, 2023
1 parent dc4e88f commit d675eb6
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
18 changes: 18 additions & 0 deletions pkg/gui/controllers/local_commits_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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()),
Expand Down Expand Up @@ -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)
}
2 changes: 2 additions & 0 deletions pkg/i18n/english.go
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ type TranslationSet struct {
YouAreHere string
YouDied string
LcRewordNotSupported string
LcChangingThisActionIsNotAllowed string
LcCherryPickCopy string
LcCherryPickCopyRange string
LcPasteCommits string
Expand Down Expand Up @@ -887,6 +888,7 @@ func EnglishTranslationSet() TranslationSet {
YouAreHere: "YOU ARE HERE",
YouDied: "YOU DIED!",
LcRewordNotSupported: "rewording commits while interactively rebasing is not currently supported",
LcChangingThisActionIsNotAllowed: "changing this kind of rebase todo entry is not allowed",
LcCherryPickCopy: "copy commit (cherry-pick)",
LcCherryPickCopyRange: "copy commit range (cherry-pick)",
LcPasteCommits: "paste commits (cherry-pick)",
Expand Down

0 comments on commit d675eb6

Please sign in to comment.