diff options
author | Luka Markušić <luka.markusic@microblink.com> | 2022-05-08 13:30:43 +0200 |
---|---|---|
committer | Luka Markušić <luka.markusic@microblink.com> | 2022-05-08 14:24:28 +0200 |
commit | ca191159f514c016f720751ae05d111d8a9d26dd (patch) | |
tree | c606713eedf16155d3c06aeb7496c709ccd813f3 | |
parent | f7c44f2407243418a0c4bb8380ede097694644c3 (diff) |
Discard staged changes only
36 files changed, 102 insertions, 1 deletions
diff --git a/pkg/commands/git_commands/stash.go b/pkg/commands/git_commands/stash.go index c479d8610..c0d187a13 100644 --- a/pkg/commands/git_commands/stash.go +++ b/pkg/commands/git_commands/stash.go @@ -25,6 +25,10 @@ func NewStashCommands( } } +func (self *StashCommands) DropNewest() error { + return self.cmd.New("git stash drop").Run() +} + func (self *StashCommands) Drop(index int) error { return self.cmd.New(fmt.Sprintf("git stash drop stash@{%d}", index)).Run() } diff --git a/pkg/gui/controllers/workspace_reset_controller.go b/pkg/gui/controllers/workspace_reset_controller.go index dc830b3ba..93277173b 100644 --- a/pkg/gui/controllers/workspace_reset_controller.go +++ b/pkg/gui/controllers/workspace_reset_controller.go @@ -12,7 +12,7 @@ import ( func (self *FilesController) createResetMenu() error { red := style.FgRed - nukeStr := "reset --hard HEAD && git clean -fd" + nukeStr := "git reset --hard HEAD && git clean -fd" if len(self.model.Submodules) > 0 { nukeStr = fmt.Sprintf("%s (%s)", nukeStr, self.c.Tr.LcAndResetSubmodules) } @@ -66,6 +66,28 @@ func (self *FilesController) createResetMenu() error { }, { LabelColumns: []string{ + self.c.Tr.LcDiscardStagedChanges, + red.Sprint("stash staged and drop stash"), + }, + Tooltip: "This will create a new stash entry containing only staged files and then drop it.", + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.RemoveStagedFiles) + if !self.helpers.WorkingTree.IsWorkingTreeDirty() { + return self.c.ErrorMsg(self.c.Tr.NoTrackedStagedFilesStash) + } + if err := self.git.Stash.SaveStagedChanges("[lazygit] tmp stash"); err != nil { + return self.c.Error(err) + } + if err := self.git.Stash.DropNewest(); err != nil { + return self.c.Error(err) + } + + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}}) + }, + Key: 'S', + }, + { + LabelColumns: []string{ self.c.Tr.LcSoftReset, red.Sprint("git reset --soft HEAD"), }, diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 3dd9822e5..4a2f2f7b9 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -265,6 +265,7 @@ type TranslationSet struct { LcDiscardAllChangesToAllFiles string LcDiscardAnyUnstagedChanges string LcDiscardUntrackedFiles string + LcDiscardStagedChanges string LcHardReset string LcViewResetOptions string LcCreateFixupCommit string @@ -594,6 +595,7 @@ type Actions struct { NukeWorkingTree string DiscardUnstagedFileChanges string RemoveUntrackedFiles string + RemoveStagedFiles string SoftReset string MixedReset string HardReset string @@ -883,6 +885,7 @@ func EnglishTranslationSet() TranslationSet { LcDiscardAllChangesToAllFiles: "nuke working tree", LcDiscardAnyUnstagedChanges: "discard unstaged changes", LcDiscardUntrackedFiles: "discard untracked files", + LcDiscardStagedChanges: "discard staged changes", LcHardReset: "hard reset", LcViewResetOptions: `view reset options`, LcCreateFixupCommit: `create fixup commit for this commit`, @@ -1193,6 +1196,7 @@ func EnglishTranslationSet() TranslationSet { NukeWorkingTree: "Nuke working tree", DiscardUnstagedFileChanges: "Discard unstaged file changes", RemoveUntrackedFiles: "Remove untracked files", + RemoveStagedFiles: "Remove staged files", SoftReset: "Soft reset", MixedReset: "Mixed reset", HardReset: "Hard reset", diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/discardStagedFiles/expected/repo/.git_keep/COMMIT_EDITMSG new file mode 100644 index 000000000..6c493ff74 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/COMMIT_EDITMSG @@ -0,0 +1 @@ +file2 diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/FETCH_HEAD b/test/integration/discardStagedFiles/expected/repo/.git_keep/FETCH_HEAD new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/FETCH_HEAD diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/HEAD b/test/integration/discardStagedFiles/expected/repo/.git_keep/HEAD new file mode 100644 index 000000000..cb089cd89 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/ORIG_HEAD b/test/integration/discardStagedFiles/expected/repo/.git_keep/ORIG_HEAD new file mode 100644 index 000000000..c3e34c41d --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/ORIG_HEAD @@ -0,0 +1 @@ +02f629e46dbaa03b58196cced3df07b02c0daf22 diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/config b/test/integration/discardStagedFiles/expected/repo/.git_keep/config new file mode 100644 index 000000000..596ebaeb3 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/config @@ -0,0 +1,8 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[user] + email = CI@example.com + name = CI diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/description b/test/integration/discardStagedFiles/expected/repo/.git_keep/description new file mode 100644 index 000000000..498b267a8 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/index b/test/integration/discardStagedFiles/expected/repo/.git_keep/index Binary files differnew file mode 100644 index 000000000..be47b0322 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/index diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/info/exclude b/test/integration/discardStagedFiles/expected/repo/.git_keep/info/exclude new file mode 100644 index 000000000..a5196d1be --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/HEAD b/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/HEAD new file mode 100644 index 000000000..9afe44c14 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/HEAD @@ -0,0 +1,5 @@ +0000000000000000000000000000000000000000 22f24c5fcc97c1ff826ecb66b60bdc01937f6052 CI <CI@example.com> 1652009263 +0200 commit (initial): file0 +22f24c5fcc97c1ff826ecb66b60bdc01937f6052 9e7ff93a5c67a0ef098e9e436961746f333edf98 CI <CI@example.com> 1652009263 +0200 commit: file1 +9e7ff93a5c67a0ef098e9e436961746f333edf98 02f629e46dbaa03b58196cced3df07b02c0daf22 CI <CI@example.com> 1652009263 +0200 commit: file2 +02f629e46dbaa03b58196cced3df07b02c0daf22 02f629e46dbaa03b58196cced3df07b02c0daf22 CI <CI@example.com> 1652009266 +0200 reset: moving to HEAD +02f629e46dbaa03b58196cced3df07b02c0daf22 02f629e46dbaa03b58196cced3df07b02c0daf22 CI <CI@example.com> 1652009266 +0200 reset: moving to HEAD diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/refs/heads/master new file mode 100644 index 000000000..e5e4b05c6 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/refs/heads/master @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 22f24c5fcc97c1ff826ecb66b60bdc01937f6052 CI <CI@example.com> 1652009263 +0200 commit (initial): file0 +22f24c5fcc97c1ff826ecb66b60bdc01937f6052 9e7ff93a5c67a0ef098e9e436961746f333edf98 CI <CI@example.com> 1652009263 +0200 commit: file1 +9e7ff93a5c67a0ef098e9e436961746f333edf98 02f629e46dbaa03b58196cced3df07b02c0daf22 CI <CI@example.com> 1652009263 +0200 commit: file2 diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/02/f629e46dbaa03b58196cced3df07b02c0daf22 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/02/f629e46dbaa03b58196cced3df07b02c0daf22 Binary files differnew file mode 100644 index 000000000..5dd10885d --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/02/f629e46dbaa03b58196cced3df07b02c0daf22 diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 Binary files differnew file mode 100644 index 000000000..f74bf2335 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 Binary files differnew file mode 100644 index 000000000..79fcadf67 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/22/f24c5fcc97c1ff826ecb66b60bdc01937f6052 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/22/f24c5fcc97c1ff826ecb66b60bdc01937f6052 new file mode 100644 index 000000000..f4e1952b1 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/22/f24c5fcc97c1ff826ecb66b60bdc01937f6052 @@ -0,0 +1,3 @@ +x +0=+.&ݦ.=3
)%o>0ZKYK;২)q!Y1KfSv +Qg§IByyʱ$GǬtN>i37y2+
\ No newline at end of file diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da Binary files differnew file mode 100644 index 000000000..06c9cb73d --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5c/ef9afea6a37d89f925e24ebf71adecb63d1f07 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5c/ef9afea6a37d89f925e24ebf71adecb63d1f07 Binary files differnew file mode 100644 index 000000000..6a6f24362 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5c/ef9afea6a37d89f925e24ebf71adecb63d1f07 diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5e/2f5743436bdc7602aa3486d5ff294940603c3d b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5e/2f5743436bdc7602aa3486d5ff294940603c3d Binary files differnew file mode 100644 index 000000000..7aee98aa9 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5e/2f5743436bdc7602aa3486d5ff294940603c3d diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/66/bbc809cdafd867cf9320bfb7484bb8fa898448 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/66/bbc809cdafd867cf9320bfb7484bb8fa898448 new file mode 100644 index 000000000..c84b87a17 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/66/bbc809cdafd867cf9320bfb7484bb8fa898448 @@ -0,0 +1,3 @@ +x+)JMUd040031QHI5`ֶww.hT[H +e"ǨS,gu"YH +$x~5(;rբW-Ж+^
\ No newline at end of file diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9d/b161bba78fbd20e7e4ae004be28e40d747726a b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9d/b161bba78fbd20e7e4ae004be28e40d747726a new file mode 100644 index 000000000..c5c3d1d48 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9d/b161bba78fbd20e7e4ae004be28e40d747726a @@ -0,0 +1,2 @@ +x +0D=+.vn<3-5o.
üŵu,BNǘ}O(YF묈yg3[uZN2sqȄw};'ܧ~BٞzkB!zb#dZۤ97%uYAJ BP
\ No newline at end of file diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/7ff93a5c67a0ef098e9e436961746f333edf98 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/7ff93a5c67a0ef098e9e436961746f333edf98 new file mode 100644 index 000000000..1c2077cd7 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/7ff93a5c67a0ef098e9e436961746f333edf98 @@ -0,0 +1,2 @@ +xA +0E]2$"BW=F2D>K."A"p)<iTr=Pȁ3{9-bਣITHOJєOnf{|˺z"d$o0tnty3?9
\ No newline at end of file diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c Binary files differnew file mode 100644 index 000000000..0e95eb06d --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 Binary files differnew file mode 100644 index 000000000..285df3e5f --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/c7/c7da3c64e86c3270f2639a1379e67e14891b6a b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/c7/c7da3c64e86c3270f2639a1379e67e14891b6a Binary files differnew file mode 100644 index 000000000..ee4385f12 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/c7/c7da3c64e86c3270f2639a1379e67e14891b6a diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 new file mode 100644 index 000000000..2e9066287 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 @@ -0,0 +1,2 @@ +x+)JMU03c040031QHI5`ֶww.hT[H +yW5Ɨ(|^-W(x9
\ No newline at end of file diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/e3/18207cf3da045ce47e2632a5326b61030a2c8e b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/e3/18207cf3da045ce47e2632a5326b61030a2c8e Binary files differnew file mode 100644 index 000000000..80258c14d --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/e3/18207cf3da045ce47e2632a5326b61030a2c8e diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/refs/heads/master b/test/integration/discardStagedFiles/expected/repo/.git_keep/refs/heads/master new file mode 100644 index 000000000..c3e34c41d --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/refs/heads/master @@ -0,0 +1 @@ +02f629e46dbaa03b58196cced3df07b02c0daf22 diff --git a/test/integration/discardStagedFiles/expected/repo/file0 b/test/integration/discardStagedFiles/expected/repo/file0 new file mode 100644 index 000000000..38143ad4a --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/file0 @@ -0,0 +1 @@ +test0 diff --git a/test/integration/discardStagedFiles/expected/repo/file1 b/test/integration/discardStagedFiles/expected/repo/file1 new file mode 100644 index 000000000..a5bce3fd2 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/file1 @@ -0,0 +1 @@ +test1 diff --git a/test/integration/discardStagedFiles/expected/repo/file2 b/test/integration/discardStagedFiles/expected/repo/file2 new file mode 100644 index 000000000..c7c7da3c6 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/file2 @@ -0,0 +1 @@ +hello there diff --git a/test/integration/discardStagedFiles/expected/repo/file3 b/test/integration/discardStagedFiles/expected/repo/file3 new file mode 100644 index 000000000..c7c7da3c6 --- /dev/null +++ b/test/integration/discardStagedFiles/expected/repo/file3 @@ -0,0 +1 @@ +hello there diff --git a/test/integration/discardStagedFiles/recording.json b/test/integration/discardStagedFiles/recording.json new file mode 100644 index 000000000..5abd7e1a8 --- /dev/null +++ b/test/integration/discardStagedFiles/recording.json @@ -0,0 +1 @@ +{"KeyEvents":[{"Timestamp":1175,"Mod":0,"Key":256,"Ch":32},{"Timestamp":1991,"Mod":0,"Key":256,"Ch":68},{"Timestamp":2923,"Mod":0,"Key":256,"Ch":83},{"Timestamp":4453,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":213,"Height":56}]}
\ No newline at end of file diff --git a/test/integration/discardStagedFiles/setup.sh b/test/integration/discardStagedFiles/setup.sh new file mode 100644 index 000000000..caff56b7d --- /dev/null +++ b/test/integration/discardStagedFiles/setup.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +set -e + +cd $1 + +git init + +git config user.email "CI@example.com" +git config user.name "CI" + +echo test0 > file0 +git add . +git commit -am file0 + +echo test1 > file1 +git add . +git commit -am file1 + +echo test2 > file2 +git add . +git commit -am file2 + +echo "hello there" > file1 +echo "hello there" > file2 +echo "hello there" > file3 diff --git a/test/integration/discardStagedFiles/test.json b/test/integration/discardStagedFiles/test.json new file mode 100644 index 000000000..9edc4a815 --- /dev/null +++ b/test/integration/discardStagedFiles/test.json @@ -0,0 +1 @@ +{ "description": "Discarding staged changes", "speed": 5 } |