Skip to content

Commit 92b9132

Browse files
committed
Don't stage already staged deleted items
1 parent 1731c72 commit 92b9132

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

pkg/gui/controllers/files_controller.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -401,16 +401,18 @@ func (self *FilesController) pressWithLock(selectedNodes []*filetree.FileNode) e
401401

402402
selectedNodes = normalisedSelectedNodes(selectedNodes)
403403

404-
// If any node has unstaged changes, we'll stage all the selected nodes. Otherwise,
405-
// we unstage all the selected nodes.
406-
if someNodesHaveUnstagedChanges(selectedNodes) {
404+
// If any node has unstaged changes, we'll stage all the selected unstaged nodes (staging already staged deleted files/folders would fail).
405+
// Otherwise, we unstage all the selected nodes.
406+
unstagedSelectedNodes := filterNodesHaveUnstagedChanges(selectedNodes)
407+
408+
if len(unstagedSelectedNodes) > 0 {
407409
self.c.LogAction(self.c.Tr.Actions.StageFile)
408410

409-
if err := self.optimisticChange(selectedNodes, self.optimisticStage); err != nil {
411+
if err := self.optimisticChange(unstagedSelectedNodes, self.optimisticStage); err != nil {
410412
return err
411413
}
412414

413-
if err := self.c.Git().WorkingTree.StageFiles(toPaths(selectedNodes)); err != nil {
415+
if err := self.c.Git().WorkingTree.StageFiles(toPaths(unstagedSelectedNodes)); err != nil {
414416
return err
415417
}
416418
} else {
@@ -1027,6 +1029,12 @@ func someNodesHaveStagedChanges(nodes []*filetree.FileNode) bool {
10271029
return lo.SomeBy(nodes, (*filetree.FileNode).GetHasStagedChanges)
10281030
}
10291031

1032+
func filterNodesHaveUnstagedChanges(nodes []*filetree.FileNode) []*filetree.FileNode {
1033+
return lo.Filter(nodes, func(node *filetree.FileNode, _ int) bool {
1034+
return node.GetHasUnstagedChanges()
1035+
})
1036+
}
1037+
10301038
func (self *FilesController) canRemove(selectedNodes []*filetree.FileNode) *types.DisabledReason {
10311039
submodules := self.c.Model().Submodules
10321040
submoduleCount := lo.CountBy(selectedNodes, func(node *filetree.FileNode) bool {

0 commit comments

Comments
 (0)