summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2023-06-07 16:40:56 +0200
committerGitHub <noreply@github.com>2023-06-07 16:40:56 +0200
commit1489a31e48c54dfed185a9848578b82b46a7fcdc (patch)
tree219c5696fd46e7f276a0237c0fb1b85edbafded5
parente229e26fbe050eb4ba9ffed8970b3992590a3694 (diff)
parent1f42c8a387529ff055307ac49bd6a5fb397f1c9c (diff)
Merge pull request #2712 from stefanhaller/discard-changes-only-from-local-commits
Allow discarding changes only from local commits
-rw-r--r--pkg/gui/controllers/commits_files_controller.go5
-rw-r--r--pkg/i18n/english.go2
-rw-r--r--pkg/integration/tests/stash/prevent_discarding_file_changes.go41
-rw-r--r--pkg/integration/tests/test_list.go1
4 files changed, 49 insertions, 0 deletions
diff --git a/pkg/gui/controllers/commits_files_controller.go b/pkg/gui/controllers/commits_files_controller.go
index f4acc0d31..745186df0 100644
--- a/pkg/gui/controllers/commits_files_controller.go
+++ b/pkg/gui/controllers/commits_files_controller.go
@@ -153,6 +153,11 @@ func (self *CommitFilesController) checkout(node *filetree.CommitFileNode) error
}
func (self *CommitFilesController) discard(node *filetree.CommitFileNode) error {
+ parentContext, ok := self.c.CurrentContext().GetParentContext()
+ if !ok || parentContext.GetKey() != context.LOCAL_COMMITS_CONTEXT_KEY {
+ return self.c.ErrorMsg(self.c.Tr.CanOnlyDiscardFromLocalCommits)
+ }
+
if node.File == nil {
return self.c.ErrorMsg(self.c.Tr.DiscardNotSupportedForDirectory)
}
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 34d33f1ab..b291a0058 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -265,6 +265,7 @@ type TranslationSet struct {
ViewItemFiles string
CommitFilesTitle string
CheckoutCommitFile string
+ CanOnlyDiscardFromLocalCommits string
DiscardOldFileChange string
DiscardFileChangesTitle string
DiscardFileChangesPrompt string
@@ -955,6 +956,7 @@ func EnglishTranslationSet() TranslationSet {
ViewItemFiles: "View selected item's files",
CommitFilesTitle: "Commit files",
CheckoutCommitFile: "Checkout file",
+ CanOnlyDiscardFromLocalCommits: "Changes can only be discarded from local commits",
DiscardOldFileChange: "Discard this commit's changes to this file",
DiscardFileChangesTitle: "Discard file changes",
DiscardFileChangesPrompt: "Are you sure you want to discard this commit's changes to this file?",
diff --git a/pkg/integration/tests/stash/prevent_discarding_file_changes.go b/pkg/integration/tests/stash/prevent_discarding_file_changes.go
new file mode 100644
index 000000000..9ee16b75c
--- /dev/null
+++ b/pkg/integration/tests/stash/prevent_discarding_file_changes.go
@@ -0,0 +1,41 @@
+package stash
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var PreventDiscardingFileChanges = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Check that it is not allowed to discard changes to a file of a stash",
+ ExtraCmdArgs: []string{},
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {},
+ SetupRepo: func(shell *Shell) {
+ shell.EmptyCommit("initial commit")
+ shell.CreateFile("file", "content")
+ shell.GitAddAll()
+ shell.Stash("stash one")
+ },
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ t.Views().Files().IsEmpty()
+
+ t.Views().Stash().
+ Focus().
+ Lines(
+ Contains("stash one").IsSelected(),
+ ).
+ PressEnter()
+
+ t.Views().CommitFiles().
+ IsFocused().
+ Lines(
+ Contains("file").IsSelected(),
+ ).
+ Press(keys.Universal.Remove)
+
+ t.ExpectPopup().Confirmation().
+ Title(Equals("Error")).
+ Content(Contains("Changes can only be discarded from local commits")).
+ Confirm()
+ },
+})
diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go
index 7a5ed71b4..5e45d7e55 100644
--- a/pkg/integration/tests/test_list.go
+++ b/pkg/integration/tests/test_list.go
@@ -155,6 +155,7 @@ var tests = []*components.IntegrationTest{
stash.CreateBranch,
stash.Drop,
stash.Pop,
+ stash.PreventDiscardingFileChanges,
stash.Rename,
stash.Stash,
stash.StashAll,