Skip to content

Commit 8e04349

Browse files
authored
When pressing a to stage all files, don't include untracked files when showing only tracked files (#4779)
- **PR Description** This is very similar to what we did for pressing space in #4386; we forgot that the "stage all" command has the same issue. 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
2 parents 79da2ca + 9c0e103 commit 8e04349

File tree

7 files changed

+65
-7
lines changed

7 files changed

+65
-7
lines changed

pkg/commands/git_commands/working_tree.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ func (self *WorkingTreeCommands) StageFiles(paths []string, extraArgs []string)
4949
}
5050

5151
// StageAll stages all files
52-
func (self *WorkingTreeCommands) StageAll() error {
53-
cmdArgs := NewGitCmd("add").Arg("-A").ToArgv()
52+
func (self *WorkingTreeCommands) StageAll(onlyTrackedFiles bool) error {
53+
cmdArgs := NewGitCmd("add").
54+
ArgIfElse(onlyTrackedFiles, "-u", "-A").
55+
ToArgv()
5456

5557
return self.cmd.New(cmdArgs).Run()
5658
}

pkg/gui/controllers/files_controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,8 @@ func (self *FilesController) toggleStagedAllWithLock() error {
634634
return err
635635
}
636636

637-
if err := self.c.Git().WorkingTree.StageAll(); err != nil {
637+
onlyTrackedFiles := self.context().GetFilter() == filetree.DisplayTracked
638+
if err := self.c.Git().WorkingTree.StageAll(onlyTrackedFiles); err != nil {
638639
return err
639640
}
640641
} else {

pkg/gui/controllers/helpers/fixup_helper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func (self *FixupHelper) HandleFindBaseCommitForFixupPress() error {
133133
Prompt: self.c.Tr.HunksWithOnlyAddedLinesWarning,
134134
HandleConfirm: func() error {
135135
if !hasStagedChanges {
136-
if err := self.c.Git().WorkingTree.StageAll(); err != nil {
136+
if err := self.c.Git().WorkingTree.StageAll(true); err != nil {
137137
return err
138138
}
139139
self.c.Refresh(types.RefreshOptions{Mode: types.SYNC, Scope: []types.RefreshableView{types.FILES}})

pkg/gui/controllers/helpers/merge_and_rebase_helper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ func (self *MergeAndRebaseHelper) PromptToContinueRebase() error {
244244
Prompt: self.c.Tr.UnstagedFilesAfterConflictsResolved,
245245
HandleConfirm: func() error {
246246
self.c.LogAction(self.c.Tr.Actions.StageAllFiles)
247-
if err := self.c.Git().WorkingTree.StageAll(); err != nil {
247+
if err := self.c.Git().WorkingTree.StageAll(true); err != nil {
248248
return err
249249
}
250250

pkg/gui/controllers/helpers/working_tree_helper.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ func (self *WorkingTreeHelper) promptToStageAllAndRetry(retry func() error) erro
207207
Prompt: self.c.Tr.NoFilesStagedPrompt,
208208
HandleConfirm: func() error {
209209
self.c.LogAction(self.c.Tr.Actions.StageAllFiles)
210-
if err := self.c.Git().WorkingTree.StageAll(); err != nil {
210+
if err := self.c.Git().WorkingTree.StageAll(false); err != nil {
211211
return err
212212
}
213213
self.syncRefresh()
@@ -228,7 +228,7 @@ func (self *WorkingTreeHelper) prepareFilesForCommit() error {
228228
noStagedFiles := !self.AnyStagedFiles()
229229
if noStagedFiles && self.c.UserConfig().Gui.SkipNoStagedFilesWarning {
230230
self.c.LogAction(self.c.Tr.Actions.StageAllFiles)
231-
err := self.c.Git().WorkingTree.StageAll()
231+
err := self.c.Git().WorkingTree.StageAll(false)
232232
if err != nil {
233233
return err
234234
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package filter_and_search
2+
3+
import (
4+
"github.com/jesseduffield/lazygit/pkg/config"
5+
. "github.com/jesseduffield/lazygit/pkg/integration/components"
6+
)
7+
8+
var StageAllStagesOnlyTrackedFilesInTrackedOnlyFilter = NewIntegrationTest(NewIntegrationTestArgs{
9+
Description: "Staging all files in tracked only view should stage only tracked files",
10+
ExtraCmdArgs: []string{},
11+
Skip: false,
12+
SetupConfig: func(config *config.AppConfig) {
13+
},
14+
SetupRepo: func(shell *Shell) {
15+
shell.CreateFileAndAdd("file-tracked", "foo")
16+
17+
shell.Commit("first commit")
18+
19+
shell.CreateFile("file-untracked", "bar")
20+
shell.UpdateFile("file-tracked", "baz")
21+
},
22+
Run: func(t *TestDriver, keys config.KeybindingConfig) {
23+
t.Views().Files().
24+
Focus().
25+
Lines(
26+
Equals("▼ /").IsSelected(),
27+
Equals(" M file-tracked"),
28+
Equals(" ?? file-untracked"),
29+
).
30+
Press(keys.Files.OpenStatusFilter).
31+
Tap(func() {
32+
t.ExpectPopup().Menu().
33+
Title(Equals("Filtering")).
34+
Select(Contains("Show only tracked files")).
35+
Confirm()
36+
}).
37+
Lines(
38+
Equals(" M file-tracked"),
39+
).
40+
Press(keys.Files.ToggleStagedAll).
41+
Press(keys.Files.OpenStatusFilter).
42+
Tap(func() {
43+
t.ExpectPopup().Menu().
44+
Title(Equals("Filtering")).
45+
Select(Contains("No filter")).
46+
Confirm()
47+
}).
48+
Lines(
49+
Equals("▼ /").IsSelected(),
50+
Equals(" M file-tracked"), // 'M' is now in the left column, so file is staged
51+
Equals(" ?? file-untracked"),
52+
)
53+
},
54+
})

pkg/integration/tests/test_list.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ var tests = []*components.IntegrationTest{
229229
filter_and_search.NestedFilter,
230230
filter_and_search.NestedFilterTransient,
231231
filter_and_search.NewSearch,
232+
filter_and_search.StageAllStagesOnlyTrackedFilesInTrackedOnlyFilter,
232233
filter_and_search.StagingFolderStagesOnlyTrackedFilesInTrackedOnlyFilter,
233234
filter_by_author.SelectAuthor,
234235
filter_by_author.TypeAuthor,

0 commit comments

Comments
 (0)