1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-08-06 22:33:07 +02:00

Stage only tracked files when staging all in filter-by-tracked-files view

Also, fix two other commands that stage all files under the hood:
- when continuing a rebase after resolving conflicts, we auto-stage all files,
  but in this case we never want to include untracked files, regardless of the
  filter
- likewise, pressing ctrl-f to find a base commit for fixup stages all files for
  convenience, but again, this should only stage files that are already tracked
This commit is contained in:
Stefan Haller
2025-07-28 13:55:47 +02:00
parent 8cc49e3be5
commit 9c0e103b90
6 changed files with 10 additions and 10 deletions

View File

@ -49,8 +49,10 @@ func (self *WorkingTreeCommands) StageFiles(paths []string, extraArgs []string)
} }
// StageAll stages all files // StageAll stages all files
func (self *WorkingTreeCommands) StageAll() error { func (self *WorkingTreeCommands) StageAll(onlyTrackedFiles bool) error {
cmdArgs := NewGitCmd("add").Arg("-A").ToArgv() cmdArgs := NewGitCmd("add").
ArgIfElse(onlyTrackedFiles, "-u", "-A").
ToArgv()
return self.cmd.New(cmdArgs).Run() return self.cmd.New(cmdArgs).Run()
} }

View File

@ -634,7 +634,8 @@ func (self *FilesController) toggleStagedAllWithLock() error {
return err return err
} }
if err := self.c.Git().WorkingTree.StageAll(); err != nil { onlyTrackedFiles := self.context().GetFilter() == filetree.DisplayTracked
if err := self.c.Git().WorkingTree.StageAll(onlyTrackedFiles); err != nil {
return err return err
} }
} else { } else {

View File

@ -133,7 +133,7 @@ func (self *FixupHelper) HandleFindBaseCommitForFixupPress() error {
Prompt: self.c.Tr.HunksWithOnlyAddedLinesWarning, Prompt: self.c.Tr.HunksWithOnlyAddedLinesWarning,
HandleConfirm: func() error { HandleConfirm: func() error {
if !hasStagedChanges { if !hasStagedChanges {
if err := self.c.Git().WorkingTree.StageAll(); err != nil { if err := self.c.Git().WorkingTree.StageAll(true); err != nil {
return err return err
} }
self.c.Refresh(types.RefreshOptions{Mode: types.SYNC, Scope: []types.RefreshableView{types.FILES}}) self.c.Refresh(types.RefreshOptions{Mode: types.SYNC, Scope: []types.RefreshableView{types.FILES}})

View File

@ -244,7 +244,7 @@ func (self *MergeAndRebaseHelper) PromptToContinueRebase() error {
Prompt: self.c.Tr.UnstagedFilesAfterConflictsResolved, Prompt: self.c.Tr.UnstagedFilesAfterConflictsResolved,
HandleConfirm: func() error { HandleConfirm: func() error {
self.c.LogAction(self.c.Tr.Actions.StageAllFiles) self.c.LogAction(self.c.Tr.Actions.StageAllFiles)
if err := self.c.Git().WorkingTree.StageAll(); err != nil { if err := self.c.Git().WorkingTree.StageAll(true); err != nil {
return err return err
} }

View File

@ -207,7 +207,7 @@ func (self *WorkingTreeHelper) promptToStageAllAndRetry(retry func() error) erro
Prompt: self.c.Tr.NoFilesStagedPrompt, Prompt: self.c.Tr.NoFilesStagedPrompt,
HandleConfirm: func() error { HandleConfirm: func() error {
self.c.LogAction(self.c.Tr.Actions.StageAllFiles) self.c.LogAction(self.c.Tr.Actions.StageAllFiles)
if err := self.c.Git().WorkingTree.StageAll(); err != nil { if err := self.c.Git().WorkingTree.StageAll(false); err != nil {
return err return err
} }
self.syncRefresh() self.syncRefresh()
@ -228,7 +228,7 @@ func (self *WorkingTreeHelper) prepareFilesForCommit() error {
noStagedFiles := !self.AnyStagedFiles() noStagedFiles := !self.AnyStagedFiles()
if noStagedFiles && self.c.UserConfig().Gui.SkipNoStagedFilesWarning { if noStagedFiles && self.c.UserConfig().Gui.SkipNoStagedFilesWarning {
self.c.LogAction(self.c.Tr.Actions.StageAllFiles) self.c.LogAction(self.c.Tr.Actions.StageAllFiles)
err := self.c.Git().WorkingTree.StageAll() err := self.c.Git().WorkingTree.StageAll(false)
if err != nil { if err != nil {
return err return err
} }

View File

@ -48,10 +48,7 @@ var StageAllStagesOnlyTrackedFilesInTrackedOnlyFilter = NewIntegrationTest(NewIn
Lines( Lines(
Equals("▼ /").IsSelected(), Equals("▼ /").IsSelected(),
Equals(" M file-tracked"), // 'M' is now in the left column, so file is staged Equals(" M file-tracked"), // 'M' is now in the left column, so file is staged
/* EXPECTED:
Equals(" ?? file-untracked"), Equals(" ?? file-untracked"),
ACTUAL: */
Equals(" A file-untracked"),
) )
}, },
}) })