diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go index cdafb5756..4a66fc9e3 100644 --- a/pkg/integration/components/shell.go +++ b/pkg/integration/components/shell.go @@ -360,8 +360,8 @@ func (self *Shell) CloneIntoRemote(name string) *Shell { } func (self *Shell) CloneIntoSubmodule(submoduleName string, submodulePath string) *Shell { - self.Clone("other_repo") - self.RunCommand([]string{"git", "submodule", "add", "--name", submoduleName, "../other_repo", submodulePath}) + self.Clone(submoduleName) + self.RunCommand([]string{"git", "submodule", "add", "--name", submoduleName, "../" + submoduleName, submodulePath}) return self } diff --git a/pkg/integration/tests/submodule/remove.go b/pkg/integration/tests/submodule/remove.go index 9290726ff..ca9a90b33 100644 --- a/pkg/integration/tests/submodule/remove.go +++ b/pkg/integration/tests/submodule/remove.go @@ -44,7 +44,7 @@ var Remove = NewIntegrationTest(NewIntegrationTestArgs{ t.Views().Main().Content( Contains("-[submodule \"my_submodule_name\"]"). Contains("- path = my_submodule_path"). - Contains("- url = ../other_repo"), + Contains("- url = ../my_submodule_name"), ) t.FileSystem().PathNotPresent(gitDirSubmodulePath) diff --git a/pkg/integration/tests/submodule/reset_folder.go b/pkg/integration/tests/submodule/reset_folder.go new file mode 100644 index 000000000..47d226b20 --- /dev/null +++ b/pkg/integration/tests/submodule/reset_folder.go @@ -0,0 +1,126 @@ +package submodule + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var ResetFolder = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Reset submodule changes located in a nested folder.", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(cfg *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("first commit") + shell.CreateDir("dir") + shell.CloneIntoSubmodule("submodule1", "dir/submodule1") + shell.CloneIntoSubmodule("submodule2", "dir/submodule2") + shell.GitAddAll() + shell.Commit("add submodules") + + shell.CreateFile("dir/submodule1/file", "") + shell.CreateFile("dir/submodule2/file", "") + shell.CreateFile("dir/file", "") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files().Focus(). + Lines( + Equals("▼ dir").IsSelected(), + Equals(" ?? file"), + Equals(" M submodule1 (submodule)"), + Equals(" M submodule2 (submodule)"), + ). + // Verify we cannot reset the entire folder (has nested file and submodule changes). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectToast(Contains("Disabled: Range select not supported for submodules")) + }). + // Verify we cannot reset submodule + file or submodule + submodule via range select. + SelectNextItem(). + Press(keys.Universal.ToggleRangeSelect). + SelectNextItem(). + Lines( + Equals("▼ dir"), + Equals(" ?? file").IsSelected(), + Equals(" M submodule1 (submodule)").IsSelected(), + Equals(" M submodule2 (submodule)"), + ). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectToast(Contains("Disabled: Range select not supported for submodules")) + }). + Press(keys.Universal.ToggleRangeSelect). + Press(keys.Universal.ToggleRangeSelect). + SelectNextItem(). + Lines( + Equals("▼ dir"), + Equals(" ?? file"), + Equals(" M submodule1 (submodule)").IsSelected(), + Equals(" M submodule2 (submodule)").IsSelected(), + ). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectToast(Contains("Disabled: Range select not supported for submodules")) + }). + // Reset the file change. + Press(keys.Universal.ToggleRangeSelect). + NavigateToLine(Contains("file")). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectPopup().Menu(). + Title(Equals("Discard changes")). + Select(Contains("Discard all changes")). + Confirm() + }). + NavigateToLine(Contains("▼ dir")). + Lines( + Equals("▼ dir").IsSelected(), + Equals(" M submodule1 (submodule)"), + Equals(" M submodule2 (submodule)"), + ). + // Verify we still cannot reset the entire folder (has two submodule changes). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectToast(Contains("Disabled: Range select not supported for submodules")) + }). + // Reset one of the submodule changes. + SelectNextItem(). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectPopup().Menu(). + Title(Equals("dir/submodule1")). + Select(Contains("Stash uncommitted submodule changes and update")). + Confirm() + }). + NavigateToLine(Contains("▼ dir")). + Lines( + Equals("▼ dir").IsSelected(), + Equals(" M submodule2 (submodule)"), + ). + // Now we can reset the folder (equivalent to resetting just the nested submodule change). + // Range selecting both the folder and submodule change is allowed. + Press(keys.Universal.ToggleRangeSelect). + SelectNextItem(). + Lines( + Equals("▼ dir").IsSelected(), + Equals(" M submodule2 (submodule)").IsSelected(), + ). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectPopup().Menu(). + Title(Equals("dir/submodule2")). + Select(Contains("Stash uncommitted submodule changes and update")). + Cancel() + }). + // Or just selecting the folder itself. + NavigateToLine(Contains("▼ dir")). + Press(keys.Universal.Remove). + Tap(func() { + t.ExpectPopup().Menu(). + Title(Equals("dir/submodule2")). + Select(Contains("Stash uncommitted submodule changes and update")). + Confirm() + }). + IsEmpty() + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 210ae2852..4752e9bde 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -345,6 +345,7 @@ var tests = []*components.IntegrationTest{ submodule.Remove, submodule.RemoveNested, submodule.Reset, + submodule.ResetFolder, sync.FetchPrune, sync.FetchWhenSortedByDate, sync.ForcePush,