summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2024-06-12 12:13:07 +0200
committerStefan Haller <stefan@haller-berlin.de>2024-06-12 12:45:00 +0200
commit92dd80c3e3af0c399261272889cc21c5efaaac08 (patch)
treeaaaa2e5599faf8cd9e3219365178fa1ea017c2c7 /pkg
parent899e25b208a7867506b0c38702b15ea32e62e587 (diff)
Suspend lazygit when continuing a rebase with exec todos
It's likely that the exec todos are some kind of lengthy build task whose output the user will want to see in the terminal.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/gui/controllers/helpers/merge_and_rebase_helper.go21
-rw-r--r--pkg/integration/tests/interactive_rebase/show_exec_todos.go2
2 files changed, 21 insertions, 2 deletions
diff --git a/pkg/gui/controllers/helpers/merge_and_rebase_helper.go b/pkg/gui/controllers/helpers/merge_and_rebase_helper.go
index c2aa1418a..c5ad78c47 100644
--- a/pkg/gui/controllers/helpers/merge_and_rebase_helper.go
+++ b/pkg/gui/controllers/helpers/merge_and_rebase_helper.go
@@ -9,10 +9,12 @@ import (
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/commands/git_commands"
+ "github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/commands/types/enums"
"github.com/jesseduffield/lazygit/pkg/gui/types"
"github.com/jesseduffield/lazygit/pkg/utils"
"github.com/samber/lo"
+ "github.com/stefanhaller/git-todo-parser/todo"
)
type MergeAndRebaseHelper struct {
@@ -110,7 +112,12 @@ func (self *MergeAndRebaseHelper) genericMergeCommand(command string) error {
// we should end up with a command like 'git merge --continue'
// it's impossible for a rebase to require a commit so we'll use a subprocess only if it's a merge
- if status == enums.REBASE_MODE_MERGING && command != REBASE_OPTION_ABORT && self.c.UserConfig.Git.Merging.ManualCommit {
+ needsSubprocess := (status == enums.REBASE_MODE_MERGING && command != REBASE_OPTION_ABORT && self.c.UserConfig.Git.Merging.ManualCommit) ||
+ // but we'll also use a subprocess if we have exec todos; those are likely to be lengthy build
+ // tasks whose output the user will want to see in the terminal
+ (status == enums.REBASE_MODE_REBASING && command != REBASE_OPTION_ABORT && self.hasExecTodos())
+
+ if needsSubprocess {
// TODO: see if we should be calling more of the code from self.Git.Rebase.GenericMergeOrRebaseAction
return self.c.RunSubprocessAndRefresh(
self.c.Git().Rebase.GenericMergeOrRebaseActionCmdObj(commandType, command),
@@ -123,6 +130,18 @@ func (self *MergeAndRebaseHelper) genericMergeCommand(command string) error {
return nil
}
+func (self *MergeAndRebaseHelper) hasExecTodos() bool {
+ for _, commit := range self.c.Model().Commits {
+ if commit.Status != models.StatusRebasing {
+ break
+ }
+ if commit.Action == todo.Exec {
+ return true
+ }
+ }
+ return false
+}
+
var conflictStrings = []string{
"Failed to merge in the changes",
"When you have resolved this problem",
diff --git a/pkg/integration/tests/interactive_rebase/show_exec_todos.go b/pkg/integration/tests/interactive_rebase/show_exec_todos.go
index bf10737e4..b66036d02 100644
--- a/pkg/integration/tests/interactive_rebase/show_exec_todos.go
+++ b/pkg/integration/tests/interactive_rebase/show_exec_todos.go
@@ -38,7 +38,7 @@ var ShowExecTodos = NewIntegrationTest(NewIntegrationTestArgs{
).
Tap(func() {
t.Common().ContinueRebase()
- t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("Rebasing (4/4)Executing: false")).Confirm()
+ t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("exit status 1")).Confirm()
}).
Lines(
Contains("CI ◯ <-- YOU ARE HERE --- commit 03"),