diff options
-rw-r--r-- | pkg/gui/controllers/files_controller.go | 89 | ||||
-rw-r--r-- | pkg/i18n/english.go | 2 |
2 files changed, 49 insertions, 42 deletions
diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index b71991fc2..81d3f4cf0 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -1062,60 +1062,65 @@ func (self *FilesController) remove(selectedNodes []*filetree.FileNode) error { selectedNodes = normalisedSelectedNodes(selectedNodes) - menuItems := []*types.MenuItem{ - { - Label: self.c.Tr.DiscardAllChanges, - OnPress: func() error { - self.c.LogAction(self.c.Tr.Actions.DiscardAllChangesInFile) + discardAllChangesItem := types.MenuItem{ + Label: self.c.Tr.DiscardAllChanges, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.DiscardAllChangesInFile) - if self.context().IsSelectingRange() { - defer self.context().CancelRangeSelect() - } + if self.context().IsSelectingRange() { + defer self.context().CancelRangeSelect() + } - for _, node := range selectedNodes { - if err := self.c.Git().WorkingTree.DiscardAllDirChanges(node); err != nil { - return err - } + for _, node := range selectedNodes { + if err := self.c.Git().WorkingTree.DiscardAllDirChanges(node); err != nil { + return err } + } - return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) - }, - Key: self.c.KeybindingsOpts().GetKey(self.c.UserConfig.Keybinding.Files.ConfirmDiscard), - Tooltip: utils.ResolvePlaceholderString( - self.c.Tr.DiscardAllTooltip, - map[string]string{ - "path": self.formattedPaths(selectedNodes), - }, - ), + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) }, + Key: self.c.KeybindingsOpts().GetKey(self.c.UserConfig.Keybinding.Files.ConfirmDiscard), + Tooltip: utils.ResolvePlaceholderString( + self.c.Tr.DiscardAllTooltip, + map[string]string{ + "path": self.formattedPaths(selectedNodes), + }, + ), } - if someNodesHaveStagedChanges(selectedNodes) && someNodesHaveUnstagedChanges(selectedNodes) { - menuItems = append(menuItems, &types.MenuItem{ - Label: self.c.Tr.DiscardUnstagedChanges, - OnPress: func() error { - self.c.LogAction(self.c.Tr.Actions.DiscardAllUnstagedChangesInFile) + discardUnstagedChangesItem := types.MenuItem{ + Label: self.c.Tr.DiscardUnstagedChanges, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.DiscardAllUnstagedChangesInFile) - if self.context().IsSelectingRange() { - defer self.context().CancelRangeSelect() - } + if self.context().IsSelectingRange() { + defer self.context().CancelRangeSelect() + } - for _, node := range selectedNodes { - if err := self.c.Git().WorkingTree.DiscardUnstagedDirChanges(node); err != nil { - return err - } + for _, node := range selectedNodes { + if err := self.c.Git().WorkingTree.DiscardUnstagedDirChanges(node); err != nil { + return err } + } - return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) + }, + Key: 'u', + Tooltip: utils.ResolvePlaceholderString( + self.c.Tr.DiscardUnstagedTooltip, + map[string]string{ + "path": self.formattedPaths(selectedNodes), }, - Key: 'u', - Tooltip: utils.ResolvePlaceholderString( - self.c.Tr.DiscardUnstagedTooltip, - map[string]string{ - "path": self.formattedPaths(selectedNodes), - }, - ), - }) + ), + } + + if !someNodesHaveStagedChanges(selectedNodes) || !someNodesHaveUnstagedChanges(selectedNodes) { + discardUnstagedChangesItem.DisabledReason = &types.DisabledReason{Text: self.c.Tr.DiscardUnstagedDisabled} + } + + menuItems := []*types.MenuItem{ + &discardAllChangesItem, + &discardUnstagedChangesItem, } return self.c.Menu(types.CreateMenuOptions{Title: self.c.Tr.DiscardChangesTitle, Items: menuItems}) diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 78b8b84cf..09cab542d 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -175,6 +175,7 @@ type TranslationSet struct { UndoMergeResolveTooltip string DiscardAllTooltip string DiscardUnstagedTooltip string + DiscardUnstagedDisabled string Pop string StashPopTooltip string Drop string @@ -1143,6 +1144,7 @@ func EnglishTranslationSet() TranslationSet { UndoMergeResolveTooltip: "Undo last merge conflict resolution.", DiscardAllTooltip: "Discard both staged and unstaged changes in '{{.path}}'.", DiscardUnstagedTooltip: "Discard unstaged changes in '{{.path}}'.", + DiscardUnstagedDisabled: "The selected items don't have both staged and unstaged changes.", Pop: "Pop", StashPopTooltip: "Apply the stash entry to your working directory and remove the stash entry.", Drop: "Drop", |