Skip to content

Commit 9c0e103

Browse files
committed
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
1 parent 8cc49e3 commit 9c0e103

File tree

6 files changed

+10
-10
lines changed

6 files changed

+10
-10
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
}

pkg/integration/tests/filter_and_search/stage_all_stages_only_tracked_files_in_tracked_only_filter.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,7 @@ var StageAllStagesOnlyTrackedFilesInTrackedOnlyFilter = NewIntegrationTest(NewIn
4848
Lines(
4949
Equals("▼ /").IsSelected(),
5050
Equals(" M file-tracked"), // 'M' is now in the left column, so file is staged
51-
/* EXPECTED:
5251
Equals(" ?? file-untracked"),
53-
ACTUAL: */
54-
Equals(" A file-untracked"),
5552
)
5653
},
5754
})

0 commit comments

Comments
 (0)