summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2023-02-12 18:00:45 +1100
committerJesse Duffield <jessedduffield@gmail.com>2023-02-12 18:12:01 +1100
commit3cfdae41165828f9ecb3f3497efd37651a6193d3 (patch)
treedd213af4be195a739fdeab7cbc3d2c3f0fed2818
parentd7956c481d51fbb6820e0e4419c87427bbfd12bb (diff)
migrate submodule reset test
-rw-r--r--pkg/integration/tests/submodule/enter.go13
-rw-r--r--pkg/integration/tests/submodule/reset.go105
-rw-r--r--pkg/integration/tests/tests.go1
-rw-r--r--test/integration/submoduleReset/config/config.yml6
-rw-r--r--test/integration/submoduleReset/expected/other_repo/HEAD1
-rw-r--r--test/integration/submoduleReset/expected/other_repo/config8
-rw-r--r--test/integration/submoduleReset/expected/other_repo/description1
-rw-r--r--test/integration/submoduleReset/expected/other_repo/info/exclude7
-rw-r--r--test/integration/submoduleReset/expected/other_repo/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52bin52 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/other_repo/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827bin21 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/other_repo/objects/42/530e986dbb65877ed8d61ca0c816e425e5c62ebin150 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/other_repo/objects/a5/0a5125768001a3ea263ffb7cafbc421a5081532
-rw-r--r--test/integration/submoduleReset/expected/other_repo/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5bin21 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/other_repo/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416bin77 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/other_repo/packed-refs2
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/COMMIT_EDITMSG1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/FETCH_HEAD0
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/HEAD1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/config13
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/description1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/indexbin369 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/info/exclude7
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/logs/HEAD3
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/logs/refs/heads/master3
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/HEAD1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/ORIG_HEAD1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/config14
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/description1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/indexbin209 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/info/exclude7
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/logs/HEAD5
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/logs/refs/heads/master2
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/logs/refs/remotes/origin/HEAD1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/logs/refs/stash1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52bin52 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/17/a177705e91137f8c55965c9c8818dd55e97c892
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/17/defcd0e1f9ad96542aa66845e53cb46c91c30dbin86 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827bin21 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/42/530e986dbb65877ed8d61ca0c816e425e5c62ebin150 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904bin15 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/5a/d28e22767f979da2c198dc6c1003b25964e3dabin20 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/87/4e570cb4ea7387ba59054b315aa584038cacea2
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/a5/0a5125768001a3ea263ffb7cafbc421a5081532
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5bin21 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416bin77 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/objects/d2/2afbf8d80bbd74bcd87cae8a17a0315cfc915bbin180 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/packed-refs2
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/refs/heads/master1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/refs/remotes/origin/HEAD1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/modules/other_repo/refs/stash1
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52bin52 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827bin21 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/2b/864257bf2d49adbad8785540d85030a60852ffbin62 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/2e/eb2c1e6451d1318b506eecddf936b59a5f32b8bin150 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/42/530e986dbb65877ed8d61ca0c816e425e5c62ebin150 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/9d/10a5a0a21eb2cfdb6206f474ed57fd5cd51440bin152 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/a5/0a5125768001a3ea263ffb7cafbc421a5081532
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5bin21 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416bin77 -> 0 bytes
-rw-r--r--test/integration/submoduleReset/expected/repo/.git_keep/refs/heads/master1
-rw-r--r--test/integration/submoduleReset/expected/repo/.gitmodules_keep3
-rw-r--r--test/integration/submoduleReset/expected/repo/myfile11
-rw-r--r--test/integration/submoduleReset/expected/repo/myfile21
-rw-r--r--test/integration/submoduleReset/expected/repo/other_repo/.git_keep1
-rw-r--r--test/integration/submoduleReset/expected/repo/other_repo/myfile11
-rw-r--r--test/integration/submoduleReset/expected/repo/other_repo/myfile21
-rw-r--r--test/integration/submoduleReset/recording.json1
-rw-r--r--test/integration/submoduleReset/setup.sh27
-rw-r--r--test/integration/submoduleReset/test.json4
69 files changed, 119 insertions, 143 deletions
diff --git a/pkg/integration/tests/submodule/enter.go b/pkg/integration/tests/submodule/enter.go
index c97e55a46..8dbbb73b4 100644
--- a/pkg/integration/tests/submodule/enter.go
+++ b/pkg/integration/tests/submodule/enter.go
@@ -26,6 +26,15 @@ var Enter = NewIntegrationTest(NewIntegrationTestArgs{
shell.Commit("add submodule")
},
Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ assertInParentRepo := func() {
+ t.Views().Status().Content(Contains("repo"))
+ }
+ assertInSubmodule := func() {
+ t.Views().Status().Content(Contains("my_submodule"))
+ }
+
+ assertInParentRepo()
+
t.Views().Submodules().Focus().
Lines(
Contains("my_submodule").IsSelected(),
@@ -33,6 +42,8 @@ var Enter = NewIntegrationTest(NewIntegrationTestArgs{
// enter the submodule
PressEnter()
+ assertInSubmodule()
+
t.Views().Files().IsFocused().
Press("e").
Tap(func() {
@@ -41,6 +52,8 @@ var Enter = NewIntegrationTest(NewIntegrationTestArgs{
// return to the parent repo
PressEscape()
+ assertInParentRepo()
+
t.Views().Submodules().IsFocused()
// we see the new commit in the submodule is ready to be staged in the parent repo
diff --git a/pkg/integration/tests/submodule/reset.go b/pkg/integration/tests/submodule/reset.go
new file mode 100644
index 000000000..474780f1b
--- /dev/null
+++ b/pkg/integration/tests/submodule/reset.go
@@ -0,0 +1,105 @@
+package submodule
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var Reset = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Enter a submodule, create a commit and stage some changes, then reset the submodule from back in the parent repo. This test captures functionality around getting a dirty submodule out of your files panel.",
+ ExtraCmdArgs: "",
+ Skip: false,
+ SetupConfig: func(cfg *config.AppConfig) {
+ cfg.UserConfig.CustomCommands = []config.CustomCommand{
+ {
+ Key: "e",
+ Context: "files",
+ Command: "git commit --allow-empty -m \"empty commit\" && echo \"my_file content\" > my_file",
+ },
+ }
+ },
+ SetupRepo: func(shell *Shell) {
+ shell.EmptyCommit("first commit")
+ shell.RunCommand("git clone --bare . ../other_repo")
+ shell.RunCommand("git submodule add ../other_repo my_submodule")
+ shell.GitAddAll()
+ shell.Commit("add submodule")
+ },
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ assertInParentRepo := func() {
+ t.Views().Status().Content(Contains("repo"))
+ }
+ assertInSubmodule := func() {
+ t.Views().Status().Content(Contains("my_submodule"))
+ }
+
+ assertInParentRepo()
+
+ t.Views().Submodules().Focus().
+ Lines(
+ Contains("my_submodule").IsSelected(),
+ ).
+ // enter the submodule
+ PressEnter()
+
+ assertInSubmodule()
+
+ t.Views().Status().Content(Contains("my_submodule"))
+
+ t.Views().Files().IsFocused().
+ Press("e").
+ Tap(func() {
+ t.Views().Commits().Content(Contains("empty commit"))
+ t.Views().Files().Content(Contains("my_file"))
+ }).
+ Lines(
+ Contains("my_file").IsSelected(),
+ ).
+ // stage my_file
+ PressPrimaryAction().
+ // return to the parent repo
+ PressEscape()
+
+ assertInParentRepo()
+
+ t.Views().Submodules().IsFocused()
+
+ t.Views().Main().Content(Contains("Submodule my_submodule contains modified content"))
+
+ t.Views().Files().Focus().
+ Lines(
+ MatchesRegexp(` M.*my_submodule \(submodule\)`).IsSelected(),
+ ).
+ Press(keys.Universal.Remove).
+ Tap(func() {
+ t.ExpectPopup().Menu().Title(Equals("my_submodule")).Select(Contains("stash uncommitted submodule changes and update")).Confirm()
+ }).
+ IsEmpty()
+
+ t.Views().Submodules().Focus().
+ PressEnter()
+
+ assertInSubmodule()
+
+ // submodule has been hard reset to the commit the parent repo specifies
+ t.Views().Branches().Lines(
+ Contains("HEAD detached").IsSelected(),
+ Contains("master"),
+ )
+
+ // empty commit is gone
+ t.Views().Commits().Lines(
+ Contains("first commit").IsSelected(),
+ )
+
+ // the staged change has been stashed
+ t.Views().Files().IsEmpty()
+
+ t.Views().Stash().Focus().
+ Lines(
+ Contains("WIP on master").IsSelected(),
+ )
+
+ t.Views().Main().Content(Contains("my_file content"))
+ },
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index b7e74114c..332d7e08f 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -79,6 +79,7 @@ var tests = []*components.IntegrationTest{
submodule.Add,
submodule.Remove,
submodule.Enter,
+ submodule.Reset,
}
func GetTests() []*components.IntegrationTest {
diff --git a/test/integration/submoduleReset/config/config.yml b/test/integration/submoduleReset/config/config.yml
deleted file mode 100644
index 991cda34b..000000000
--- a/test/integration/submoduleReset/config/config.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-disableStartupPopups: true
-customCommands:
- - key: 'N'
- description: 'Add file'
- context: 'files'
- command: 'echo "haha" > output.txt'
diff --git a/test/integration/submoduleReset/expected/other_repo/HEAD b/test/integration/submoduleReset/expected/other_repo/HEAD
deleted file mode 100644
index cb089cd89..000000000
--- a/test/integration/submoduleReset/expected/other_repo/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/master
diff --git a/test/integration/submoduleReset/expected/other_repo/config b/test/integration/submoduleReset/expected/other_repo/config
deleted file mode 100644
index 662e16b6c..000000000
--- a/test/integration/submoduleReset/expected/other_repo/config
+++ /dev/null
@@ -1,8 +0,0 @@
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = true
- ignorecase = true
- precomposeunicode = true
-[remote "origin"]
- url = /Users/jesseduffieldduffield/go/src/github.com/jesseduffield/lazygit/test/integration/submoduleReset/actual/./repo
diff --git a/test/integration/submoduleReset/expected/other_repo/description b/test/integration/submoduleReset/expected/other_repo/description
deleted file mode 100644
index 498b267a8..000000000
--- a/test/integration/submoduleReset/expected/other_repo/description
+++ /dev/null
@@ -1 +0,0 @@
-Unnamed repository; edit this file 'description' to name the repository.
diff --git a/test/integration/submoduleReset/expected/other_repo/info/exclude b/test/integration/submoduleReset/expected/other_repo/info/exclude
deleted file mode 100644
index 8e9f2071f..000000000
--- a/test/integration/submoduleReset/expected/other_repo/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/submoduleReset/expected/other_repo/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52 b/test/integration/submoduleReset/expected/other_repo/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52
deleted file mode 100644
index 7f2ebf4ee..000000000
--- a/test/integration/submoduleReset/expected/other_repo/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52
+++ /dev/null
Binary files differ
diff --git a/test/integration/submoduleReset/expected/other_repo/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/test/integration/submoduleReset/expected/other_repo/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
deleted file mode 100644
index f74bf2335..000000000
--- a/test/integration/submoduleReset/expected/other_repo/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
+++ /dev/null
Binary files differ
diff --git a/test/integration/submoduleReset/expected/other_repo/objects/42/530e986dbb65877ed8d61ca0c816e425e5c62e b/test/integration/submoduleReset/expected/other_repo/objects/42/530e986dbb65877ed8d61ca0c816e425e5c62e
deleted file mode 100644
index 64d20cb1e..000000000
--- a/test/integration/submoduleReset/expected/other_repo/objects/42/530e986dbb65877ed8d61ca0c816e425e5c62e
+++ /dev/null
Binary files differ
diff --git a/test/integration/submoduleReset/expected/other_repo/objects/a5/0a5125768001a3ea263ffb7cafbc421a508153 b/test/integration/submoduleReset/expected/other_repo/objects/a5/0a5125768001a3ea263ffb7cafbc421a508153
deleted file mode 100644
index 5dd5f3236..000000000
--- a/test/integration/submoduleReset/expected/other_repo/objects/a5/0a5125768001a3ea263ffb7cafbc421a508153
+++ /dev/null
@@ -1,2 +0,0 @@
-xM
-0@sJ&N  I޾/ZHR%d"r@X<-4dG5?fxN(_& 6]פ˟\ճ5, \ No newline at end of file
diff --git a/test/integration/submoduleReset/expected/other_repo/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 b/test/integration/submoduleReset/expected/other_repo/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
deleted file mode 100644
index 285df3e5f..000000000
--- a/test/integration/submoduleReset/expected/other_repo/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
+++ /dev/null
Binary files differ
diff --git a/test/integration/submoduleReset/expected/other_repo/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416 b/test/integration/submoduleReset/expected/other_repo/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416
deleted file mode 100644
index 96d2e71a6..000000000
--- a/test/integration/submoduleReset/expected/other_repo/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416
+++ /dev/null
Binary files differ
diff --git a/test/integration/submoduleReset/expected/other_repo/packed-refs b/test/integration/submoduleReset/expected/other_repo/packed-refs
deleted file mode 100644
index 62f6568b2..000000000
--- a/test/integration/submoduleReset/expected/other_repo/packed-refs
+++ /dev/null
@@ -1,2 +0,0 @@
-# pack-refs with: peeled fully-peeled sorted
-42530e986dbb65877ed8d61ca0c816e425e5c62e refs/heads/master
diff --git a/test/integration/submoduleReset/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/submoduleReset/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index ad3cdfdd1..000000000
--- a/test/integration/submoduleReset/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1 +0,0 @@
-add submodule
diff --git a/test/integration/submoduleReset/expected/repo/.git_keep/FETCH_HEAD b/test/integration/submoduleReset/expected/repo/.git_keep/FETCH_HEAD
deleted file mode 100644
index e69de29bb..000000000
--- a/test/integration/submoduleReset/expected/repo/.git_keep/FETCH_HEAD
+++ /dev/null
diff --git a/test/integration/submoduleReset/expected/repo/.git_keep/HEAD b/test/integration/submoduleReset/expected/repo/.git_keep/HEAD
deleted file mode 100644
index cb089cd89..000000000
--- a/test/integration/submoduleReset/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/master
diff --git a/test/integration/submoduleReset/expected/repo/.git_keep/config b/test/integration/submoduleReset/expected/repo/.git_keep/config
deleted file mode 100644
index ff4ef7e1c..000000000
--- a/test/integration/submoduleReset/expected/repo/.git_keep/config
+++ /dev/null
@@ -1,13 +0,0 @@
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- ignorecase = true
- precomposeunicode = true
-[user]
- email = CI@example.com
- name = CI
-[submodule "other_repo"]
- url = /Users/jesseduffieldduffield/go/src/github.com/jesseduffield/lazygit/test/integration/submoduleReset/actual/other_repo
- active = true
diff --git a/test/integration/submoduleReset/expected/repo/.git_keep/description b/test/integration/submoduleReset/expected/repo/.git_keep/description
deleted file mode 100644
index 498b267a8..000000000
--- a/test/integration/submoduleReset/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/submoduleReset/expected/repo/.git_keep/index b/test/integration/submoduleReset/expected/repo/.git_keep/index
deleted file mode 100644
index 479039f96..000000000
--- a/test/integration/submoduleReset/expected/repo/.git_keep/index
+++ /dev/null
Binary files differ
diff --git a/test/integration/submoduleReset/expected/repo/.git_keep/info/exclude b/test/integration/submoduleReset/expected/repo/.git_keep/info/exclude
deleted file mode 100644
index 8e9f2071f..000000000
--- a/test/integration/submoduleReset/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/submoduleReset/expected/repo/.git_keep/logs/HEAD b/test/integration/submoduleReset/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index d10fa88d0..000000000
--- a/