summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2023-04-05 09:33:11 +0200
committerStefan Haller <stefan@haller-berlin.de>2023-04-15 08:36:03 +0200
commit227b0b781cb4aab2ae613a66f2e73467670ae208 (patch)
treefcde1490ce4a41f068940f575d6a3e44f25a5425
parent740474c10c7d2038a33f9861573a4a85213c2270 (diff)
Show update-ref commands in rebase todo list
This is useful when working with stacked branches, because you can now move "pick" entries across an update-ref command and you can tell exactly which branch the commit will end up in. It's also useful to spot situations where the --update-refs option didn't work as desired. For example, if you duplicate a branch and want to rebase only one of the branches but not the other (maybe for testing); if you have rebase.updateRefs=true in your git config, then rebasing one branch will move the other branch along. To solve this we'll have to introduce a way to delete the update-ref entry (maybe by hitting backspace?); this is out of scope for this PR, so for now users will have to type "git rebase --edit-todo" into the custom command prompt to sort this out. We will also have to prevent users from trying to turn update-ref commands into other commands like "pick" or "drop"; we'll do this later in this branch.
-rw-r--r--pkg/commands/git_commands/commit_loader.go4
-rw-r--r--pkg/gui/commits_panel.go8
-rw-r--r--pkg/gui/presentation/commits.go2
-rw-r--r--pkg/i18n/english.go2
4 files changed, 14 insertions, 2 deletions
diff --git a/pkg/commands/git_commands/commit_loader.go b/pkg/commands/git_commands/commit_loader.go
index 6e409d717..bce16de15 100644
--- a/pkg/commands/git_commands/commit_loader.go
+++ b/pkg/commands/git_commands/commit_loader.go
@@ -311,7 +311,9 @@ func (self *CommitLoader) getInteractiveRebasingCommits() ([]*models.Commit, err
}
for _, t := range todos {
- if t.Commit == "" {
+ if t.Command == todo.UpdateRef {
+ t.Msg = strings.TrimPrefix(t.Ref, "refs/heads/")
+ } else if t.Commit == "" {
// Command does not have a commit associated, skip
continue
}
diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go
index 8b8c74eec..2b75be4d0 100644
--- a/pkg/gui/commits_panel.go
+++ b/pkg/gui/commits_panel.go
@@ -1,6 +1,7 @@
package gui
import (
+ "github.com/fsmiamoto/git-todo-parser/todo"
"github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/gui/types"
"github.com/jesseduffield/lazygit/pkg/utils"
@@ -34,6 +35,13 @@ func (gui *Gui) branchCommitsRenderToMain() error {
commit := gui.State.Contexts.LocalCommits.GetSelected()
if commit == nil {
task = types.NewRenderStringTask(gui.c.Tr.NoCommitsThisBranch)
+ } else if commit.Action == todo.UpdateRef {
+ task = types.NewRenderStringTask(
+ utils.ResolvePlaceholderString(
+ gui.c.Tr.UpdateRefHere,
+ map[string]string{
+ "ref": commit.Name,
+ }))
} else {
cmdObj := gui.git.Commit.ShowCmdObj(commit.Sha, gui.State.Modes.Filtering.GetPath(),
gui.IgnoreWhitespaceInDiffView)
diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go
index 8a4d947c4..7e16197b5 100644
--- a/pkg/gui/presentation/commits.go
+++ b/pkg/gui/presentation/commits.go
@@ -347,7 +347,7 @@ func getShaColor(
return getBisectStatusColor(bisectStatus)
}
- diffed := commit.Sha == diffName
+ diffed := commit.Sha != "" && commit.Sha == diffName
shaColor := theme.DefaultTextColor
switch commit.Status {
case models.StatusUnpushed:
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index e7756d03e..7b6642882 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -105,6 +105,7 @@ type TranslationSet struct {
SureResetCommitAuthor string
LcRenameCommitEditor string
NoCommitsThisBranch string
+ UpdateRefHere string
Error string
LcSelectHunk string
LcNavigateConflicts string
@@ -754,6 +755,7 @@ func EnglishTranslationSet() TranslationSet {
LcSquashDown: "squash down",
LcFixupCommit: "fixup commit",
NoCommitsThisBranch: "No commits for this branch",
+ UpdateRefHere: "Update branch '{{.ref}}' here",
CannotSquashOrFixupFirstCommit: "There's no commit below to squash into",
Fixup: "Fixup",
SureFixupThisCommit: "Are you sure you want to 'fixup' this commit? It will be merged into the commit below",