1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-02-03 13:21:56 +02:00

Allow discarding changes only from local commits

We use CommitFilesController also for the files of commits that we show
elsewhere, e.g. for branch commits, tags, or stashes. It doesn't make sense to
discard changes from those (for stashes it might be possible to implement it
somehow, but that would be a new feature), so we disallow it unless we are in
the local commits panel.
This commit is contained in:
Stefan Haller 2023-06-06 08:30:44 +02:00
parent e229e26fbe
commit 1f42c8a387
4 changed files with 49 additions and 0 deletions

View File

@ -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)
}

View File

@ -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?",

View File

@ -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()
},
})

View File

@ -155,6 +155,7 @@ var tests = []*components.IntegrationTest{
stash.CreateBranch,
stash.Drop,
stash.Pop,
stash.PreventDiscardingFileChanges,
stash.Rename,
stash.Stash,
stash.StashAll,