mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-12 08:36:25 -04:00
Don't stage out-of-date submodules when asking user to auto-stage after resolving conflicts
When you rebase a branch and there are conflicts, lazygit asks you to continue the rebase when it detects that all conflicts have been resolved. However, it is common to make additional changes beyond just fixing the conflicts (e.g. to fix build failures), and when doing that while the "Continue the rebase?" prompt is showing, lazygit detects that too and asks you if you want to stage those newly modified files too. This is all well and good (and can be disabled for those who don't like it); however, lazygit would treat out-of-date submodules as unstaged changes and would offer to stage those as well, and this is pretty bad and almost never what you want. Fix this by excluding submodules from that second check.
This commit is contained in:
parent
58bcfc4347
commit
9f38d02a4e
|
|
@ -237,14 +237,14 @@ func (self *MergeAndRebaseHelper) PromptToContinueRebase() error {
|
|||
Mode: types.SYNC, Scope: []types.RefreshableView{types.FILES},
|
||||
})
|
||||
|
||||
root := self.c.Contexts().Files.FileTreeViewModel.GetRoot()
|
||||
if root.GetHasUnstagedChanges() {
|
||||
unstagedFiles := GetUnstagedFilesExceptSubmodules(self.c.Model().Files, self.c.Model().Submodules)
|
||||
if len(unstagedFiles) > 0 {
|
||||
self.c.Confirm(types.ConfirmOpts{
|
||||
Title: self.c.Tr.Continue,
|
||||
Prompt: self.c.Tr.UnstagedFilesAfterConflictsResolved,
|
||||
HandleConfirm: func() error {
|
||||
self.c.LogAction(self.c.Tr.Actions.StageAllFiles)
|
||||
if err := self.c.Git().WorkingTree.StageAll(true); err != nil {
|
||||
if err := self.c.Git().WorkingTree.StageFiles(unstagedFiles, []string{}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -97,6 +97,12 @@ func IsWorkingTreeDirtyExceptSubmodules(files []*models.File, submoduleConfigs [
|
|||
return AnyStagedFilesExceptSubmodules(files, submoduleConfigs) || AnyTrackedFilesExceptSubmodules(files, submoduleConfigs)
|
||||
}
|
||||
|
||||
func GetUnstagedFilesExceptSubmodules(files []*models.File, submoduleConfigs []*models.SubmoduleConfig) []string {
|
||||
return lo.FilterMap(files, func(f *models.File, _ int) (string, bool) {
|
||||
return f.Path, f.HasUnstagedChanges && f.Tracked && !f.IsSubmodule(submoduleConfigs)
|
||||
})
|
||||
}
|
||||
|
||||
func (self *WorkingTreeHelper) FileForSubmodule(submodule *models.SubmoduleConfig) *models.File {
|
||||
for _, file := range self.c.Model().Files {
|
||||
if file.IsSubmodule([]*models.SubmoduleConfig{submodule}) {
|
||||
|
|
|
|||
|
|
@ -90,12 +90,9 @@ var RebaseConflictsFixBuildErrorsWithOutOfDateSubmodule = NewIntegrationTest(New
|
|||
|
||||
t.Views().Files().
|
||||
Lines(
|
||||
/* EXPECTED:
|
||||
Equals("▼ /").IsSelected(),
|
||||
Equals(" M submodule (submodule)"),
|
||||
Equals(" ?? untracked-file"),
|
||||
ACTUAL: */
|
||||
Equals("?? untracked-file"),
|
||||
)
|
||||
|
||||
t.Views().Commits().
|
||||
|
|
@ -109,10 +106,7 @@ var RebaseConflictsFixBuildErrorsWithOutOfDateSubmodule = NewIntegrationTest(New
|
|||
|
||||
t.Views().Main().
|
||||
Content(
|
||||
/* EXPECTED:
|
||||
DoesNotContain("submodule").DoesNotContain("untracked-file"),
|
||||
ACTUAL: */
|
||||
Contains("submodule").DoesNotContain("untracked-file"),
|
||||
)
|
||||
},
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue