diff --git a/pkg/integration/tests/commit/discard_old_file_change.go b/pkg/integration/tests/commit/discard_old_file_change.go new file mode 100644 index 000000000..735dcca87 --- /dev/null +++ b/pkg/integration/tests/commit/discard_old_file_change.go @@ -0,0 +1,57 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var DiscardOldFileChange = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Discarding a single file from an old commit (does rebase in background to remove the file but retain the other one)", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("file0", "file0") + shell.Commit("first commit") + + shell.CreateFileAndAdd("file1", "file2") + shell.CreateFileAndAdd("fileToRemove", "fileToRemove") + shell.Commit("commit to change") + + shell.CreateFileAndAdd("file3", "file3") + shell.Commit("third commit") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("third commit").IsSelected(), + Contains("commit to change"), + Contains("first commit"), + ). + SelectNextItem(). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("file1").IsSelected(), + Contains("fileToRemove"), + ). + SelectNextItem(). + Press(keys.Universal.Remove) + + t.ExpectPopup().Confirmation(). + Title(Equals("Discard file changes")). + Content(Contains("Are you sure you want to discard this commit's changes to this file?")). + Confirm() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("file1").IsSelected(), + ) + + t.FileSystem().PathNotPresent("fileToRemove") + }, +}) diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go index d63b1aa50..c550c2a0c 100644 --- a/pkg/integration/tests/tests.go +++ b/pkg/integration/tests/tests.go @@ -45,6 +45,7 @@ var tests = []*components.IntegrationTest{ commit.Staged, commit.Unstaged, commit.StagedWithoutHooks, + commit.DiscardOldFileChange, custom_commands.Basic, custom_commands.FormPrompts, custom_commands.MenuFromCommand, diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/discardOldFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG deleted file mode 100644 index 7b27632fe..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG +++ /dev/null @@ -1 +0,0 @@ -twoFiles diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/FETCH_HEAD b/test/integration/discardOldFileChanges/expected/repo/.git_keep/FETCH_HEAD deleted file mode 100644 index e69de29bb..000000000 diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/HEAD b/test/integration/discardOldFileChanges/expected/repo/.git_keep/HEAD deleted file mode 100644 index cb089cd89..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/ORIG_HEAD b/test/integration/discardOldFileChanges/expected/repo/.git_keep/ORIG_HEAD deleted file mode 100644 index db70e637d..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/ORIG_HEAD +++ /dev/null @@ -1 +0,0 @@ -7880a9728615a4d196df39600a0c8c71b40d96d6 diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/config b/test/integration/discardOldFileChanges/expected/repo/.git_keep/config deleted file mode 100644 index 8ae104545..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/config +++ /dev/null @@ -1,10 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = false - logallrefupdates = true - ignorecase = true - precomposeunicode = true -[user] - email = CI@example.com - name = CI diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/description b/test/integration/discardOldFileChanges/expected/repo/.git_keep/description deleted file mode 100644 index 498b267a8..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/index b/test/integration/discardOldFileChanges/expected/repo/.git_keep/index deleted file mode 100644 index 258123f26..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/index and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/info/exclude b/test/integration/discardOldFileChanges/expected/repo/.git_keep/info/exclude deleted file mode 100644 index 8e9f2071f..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/info/exclude +++ /dev/null @@ -1,7 +0,0 @@ -# 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] -# *~ -.DS_Store diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/HEAD b/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/HEAD deleted file mode 100644 index cd7bc3c77..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/HEAD +++ /dev/null @@ -1,9 +0,0 @@ -0000000000000000000000000000000000000000 b7a702b642978f2a9b1af9c1c67b22127af78c92 CI <CI@example.com> 1641697108 +1100 commit (initial): file0 -b7a702b642978f2a9b1af9c1c67b22127af78c92 7880a9728615a4d196df39600a0c8c71b40d96d6 CI <CI@example.com> 1641697108 +1100 commit: twoFiles -7880a9728615a4d196df39600a0c8c71b40d96d6 af6725ba23f43a286deff0747476d7874113df1e CI <CI@example.com> 1641697108 +1100 commit: file2 -af6725ba23f43a286deff0747476d7874113df1e af6725ba23f43a286deff0747476d7874113df1e CI <CI@example.com> 1641697111 +1100 rebase: updating HEAD -af6725ba23f43a286deff0747476d7874113df1e b7a702b642978f2a9b1af9c1c67b22127af78c92 CI <CI@example.com> 1641697111 +1100 rebase -i (start): checkout b7a702b642978f2a9b1af9c1c67b22127af78c92 -b7a702b642978f2a9b1af9c1c67b22127af78c92 7880a9728615a4d196df39600a0c8c71b40d96d6 CI <CI@example.com> 1641697111 +1100 rebase -i: fast-forward -7880a9728615a4d196df39600a0c8c71b40d96d6 d14505f281a54cda96fc5fb8cd4b4ee14bae6264 CI <CI@example.com> 1641697111 +1100 commit (amend): twoFiles -d14505f281a54cda96fc5fb8cd4b4ee14bae6264 225ad83faa797c1831a2bc956a21e2d472f21443 CI <CI@example.com> 1641697111 +1100 rebase -i (pick): file2 -225ad83faa797c1831a2bc956a21e2d472f21443 225ad83faa797c1831a2bc956a21e2d472f21443 CI <CI@example.com> 1641697111 +1100 rebase -i (finish): returning to refs/heads/master diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/refs/heads/master deleted file mode 100644 index 13413542d..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/refs/heads/master +++ /dev/null @@ -1,4 +0,0 @@ -0000000000000000000000000000000000000000 b7a702b642978f2a9b1af9c1c67b22127af78c92 CI <CI@example.com> 1641697108 +1100 commit (initial): file0 -b7a702b642978f2a9b1af9c1c67b22127af78c92 7880a9728615a4d196df39600a0c8c71b40d96d6 CI <CI@example.com> 1641697108 +1100 commit: twoFiles -7880a9728615a4d196df39600a0c8c71b40d96d6 af6725ba23f43a286deff0747476d7874113df1e CI <CI@example.com> 1641697108 +1100 commit: file2 -af6725ba23f43a286deff0747476d7874113df1e 225ad83faa797c1831a2bc956a21e2d472f21443 CI <CI@example.com> 1641697111 +1100 rebase -i (finish): refs/heads/master onto b7a702b642978f2a9b1af9c1c67b22127af78c92 diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/00/cbccfd35a05ef9373bba9d5633cf6e67f83dd5 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/00/cbccfd35a05ef9373bba9d5633cf6e67f83dd5 deleted file mode 100644 index fd478c4af..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/00/cbccfd35a05ef9373bba9d5633cf6e67f83dd5 and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0a/91dcf3772f7fd7409b3df04eb6ef177219303a b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0a/91dcf3772f7fd7409b3df04eb6ef177219303a deleted file mode 100644 index 2794a5840..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0a/91dcf3772f7fd7409b3df04eb6ef177219303a +++ /dev/null @@ -1 +0,0 @@ -x���j1DS�W��]iO+��\�V�D>s'C>?j҇���n� �Wz���d9��V�c\3{Z3Ve��S�D�.��>���~-�C� >E�րi&*'&Ġ 폇�%�a�ZԨ*�G)L�"�q�vw�����l?���V���0�̈�^������/�w����͙�r�~�K� \ No newline at end of file diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0c/db6daba7e25b6d6d10da326e0ab74401021370 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0c/db6daba7e25b6d6d10da326e0ab74401021370 deleted file mode 100644 index 798edd72c..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0c/db6daba7e25b6d6d10da326e0ab74401021370 +++ /dev/null @@ -1,2 +0,0 @@ -x��A -�0E]��$���DD��z�i2��iK��㛍{y�����Z�\� ��.�%xJ��<�A�2�� ���6G��.KΎL?����x�$gM��y��]�(�?���0�pƇ\��\�Z���pF�Z��EU�SW��u������� �/1��Z@� \ No newline at end of file diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 deleted file mode 100644 index f74bf2335..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/e987d34afb121659724591cd709e2a789184fc b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/e987d34afb121659724591cd709e2a789184fc deleted file mode 100644 index b09179f5f..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/e987d34afb121659724591cd709e2a789184fc and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 deleted file mode 100644 index 79fcadf67..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/22/5ad83faa797c1831a2bc956a21e2d472f21443 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/22/5ad83faa797c1831a2bc956a21e2d472f21443 deleted file mode 100644 index f0e96277f..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/22/5ad83faa797c1831a2bc956a21e2d472f21443 and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da deleted file mode 100644 index 06c9cb73d..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/42/786aead9ca20a3427c38e5e5262fa787ce9868 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/42/786aead9ca20a3427c38e5e5262fa787ce9868 deleted file mode 100644 index 2f0336f2f..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/42/786aead9ca20a3427c38e5e5262fa787ce9868 and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/78/80a9728615a4d196df39600a0c8c71b40d96d6 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/78/80a9728615a4d196df39600a0c8c71b40d96d6 deleted file mode 100644 index ff9e69171..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/78/80a9728615a4d196df39600a0c8c71b40d96d6 and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/7b/8a8396be4352039598acb43acaadc1c380551f b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/7b/8a8396be4352039598acb43acaadc1c380551f deleted file mode 100644 index 23756a369..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/7b/8a8396be4352039598acb43acaadc1c380551f and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c deleted file mode 100644 index 0e95eb06d..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 deleted file mode 100644 index 285df3e5f..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/af/6725ba23f43a286deff0747476d7874113df1e b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/af/6725ba23f43a286deff0747476d7874113df1e deleted file mode 100644 index 44a1872c3..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/af/6725ba23f43a286deff0747476d7874113df1e +++ /dev/null @@ -1,3 +0,0 @@ -x��A -� @Ѯ=��B��qT(��U�1�# �&=~s�n�ekm��p釪�,R��^kr��̩xrN*)�])��|��#p -C$�<LT�K� Q��id��_�a��ާ��_n��7���"�H) D{E0��S]��M]V���9n \ No newline at end of file diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/b7/a702b642978f2a9b1af9c1c67b22127af78c92 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/b7/a702b642978f2a9b1af9c1c67b22127af78c92 deleted file mode 100644 index 8bcfe2c70..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/b7/a702b642978f2a9b1af9c1c67b22127af78c92 +++ /dev/null @@ -1,2 +0,0 @@ -x��A -�0Fa�9����c���#i�`��R"x|{����t�S�\b6���C*�V��ToPS�.}�k�i��>NO|S{���[{��`Qx���;�1������`��7+� \ No newline at end of file diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 deleted file mode 100644 index 2e9066287..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 +++ /dev/null @@ -1,2 +0,0 @@ -x+)JMU03c040031QH��I5`������ֶw���w.��h�T�[H -��y�W5�Ɨ��(�|�^-�W(x9 \ No newline at end of file diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d1/4505f281a54cda96fc5fb8cd4b4ee14bae6264 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d1/4505f281a54cda96fc5fb8cd4b4ee14bae6264 deleted file mode 100644 index 76e9da484..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d1/4505f281a54cda96fc5fb8cd4b4ee14bae6264 and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b deleted file mode 100644 index 9b771fc2f..000000000 Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b and /dev/null differ diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/refs/heads/master b/test/integration/discardOldFileChanges/expected/repo/.git_keep/refs/heads/master deleted file mode 100644 index 2ebac56f2..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/refs/heads/master +++ /dev/null @@ -1 +0,0 @@ -225ad83faa797c1831a2bc956a21e2d472f21443 diff --git a/test/integration/discardOldFileChanges/expected/repo/file0 b/test/integration/discardOldFileChanges/expected/repo/file0 deleted file mode 100644 index 38143ad4a..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/file0 +++ /dev/null @@ -1 +0,0 @@ -test0 diff --git a/test/integration/discardOldFileChanges/expected/repo/file1 b/test/integration/discardOldFileChanges/expected/repo/file1 deleted file mode 100644 index a5bce3fd2..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/file1 +++ /dev/null @@ -1 +0,0 @@ -test1 diff --git a/test/integration/discardOldFileChanges/expected/repo/file2 b/test/integration/discardOldFileChanges/expected/repo/file2 deleted file mode 100644 index 180cf8328..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/file2 +++ /dev/null @@ -1 +0,0 @@ -test2 diff --git a/test/integration/discardOldFileChanges/expected/repo/file3 b/test/integration/discardOldFileChanges/expected/repo/file3 deleted file mode 100644 index df6b0d2bc..000000000 --- a/test/integration/discardOldFileChanges/expected/repo/file3 +++ /dev/null @@ -1 +0,0 @@ -test3 diff --git a/test/integration/discardOldFileChanges/recording.json b/test/integration/discardOldFileChanges/recording.json deleted file mode 100644 index 0b9a99ec5..000000000 --- a/test/integration/discardOldFileChanges/recording.json +++ /dev/null @@ -1 +0,0 @@ -{"KeyEvents":[{"Timestamp":635,"Mod":0,"Key":259,"Ch":0},{"Timestamp":899,"Mod":0,"Key":259,"Ch":0},{"Timestamp":1227,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1571,"Mod":0,"Key":13,"Ch":13},{"Timestamp":1971,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2322,"Mod":0,"Key":256,"Ch":100},{"Timestamp":2731,"Mod":0,"Key":13,"Ch":13},{"Timestamp":3707,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]} \ No newline at end of file diff --git a/test/integration/discardOldFileChanges/setup.sh b/test/integration/discardOldFileChanges/setup.sh deleted file mode 100644 index 5b592cabd..000000000 --- a/test/integration/discardOldFileChanges/setup.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/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 -echo testZ > fileZ -git add . -git commit -am twoFiles - -echo test2 > file2 -git add . -git commit -am file2 - -echo test3 > file3 -git add . diff --git a/test/integration/discardOldFileChanges/test.json b/test/integration/discardOldFileChanges/test.json deleted file mode 100644 index 04a59a63c..000000000 --- a/test/integration/discardOldFileChanges/test.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "description": "Discarding a single file from an old commit (does rebase in background to remove the file but retain the other one)", - "speed": 5 -}