aboutsummaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorAdrian Ratiu <adrian.ratiu@collabora.com>2026-01-12 20:46:27 +0200
committerJunio C Hamano <gitster@pobox.com>2026-01-12 11:56:56 -0800
commite14349d58eeae0eac23bf7f740d22f51fc90a49d (patch)
tree43f98c789332a4d7e9ba861b1d32501eff127328 /t
parentc349bad72969d59758e1294b4e9964dccd967fa0 (diff)
downloadgit-e14349d58eeae0eac23bf7f740d22f51fc90a49d.tar.xz
submodule--helper: add gitdir migration command
Manually running "git config submodule.<name>.gitdir .git/modules/<name>" for each submodule can be impractical, so add a migration command to submodule--helper to automatically create configs for all submodules as required by extensions.submodulePathConfig. The command calls create_default_gitdir_config() which validates the gitdir paths before adding the configs. Suggested-by: Junio C Hamano <gitster@pobox.com> Suggested-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't')
-rwxr-xr-xt/t7425-submodule-gitdir-path-extension.sh67
1 files changed, 67 insertions, 0 deletions
diff --git a/t/t7425-submodule-gitdir-path-extension.sh b/t/t7425-submodule-gitdir-path-extension.sh
index 03ac165de9..89e2feab8b 100755
--- a/t/t7425-submodule-gitdir-path-extension.sh
+++ b/t/t7425-submodule-gitdir-path-extension.sh
@@ -279,4 +279,71 @@ test_expect_success '`git clone --recurse-submodules` respects init.defaultSubmo
)
'
+test_expect_success 'submodule--helper migrates legacy modules' '
+ (
+ cd upstream &&
+
+ # previous submodules exist and were not migrated yet
+ test_must_fail git config submodule.sub1.gitdir &&
+ test_must_fail git config submodule.sub2.gitdir &&
+ test_path_is_dir .git/modules/sub1 &&
+ test_path_is_dir .git/modules/sub2 &&
+
+ # run migration
+ git submodule--helper migrate-gitdir-configs &&
+
+ # test that migration worked
+ git config submodule.sub1.gitdir >actual &&
+ echo ".git/modules/sub1" >expect &&
+ test_cmp expect actual &&
+ git config submodule.sub2.gitdir >actual &&
+ echo ".git/modules/sub2" >expect &&
+ test_cmp expect actual &&
+
+ # repository extension is enabled after migration
+ git config extensions.submodulePathConfig >actual &&
+ echo "true" >expect &&
+ test_cmp expect actual
+ )
+'
+
+test_expect_success '`git clone --recurse-submodules` works after migration' '
+ test_when_finished "rm -rf repo-clone-recursive" &&
+
+ # test with extension disabled after the upstream repo was migrated
+ git clone --recurse-submodules upstream repo-clone-recursive &&
+ (
+ cd repo-clone-recursive &&
+
+ # init.defaultSubmodulePathConfig was disabled before clone, so
+ # the repo extension config should also be off, the migration ignored
+ test_must_fail git config extensions.submodulePathConfig &&
+
+ # modules should look like there was no migration done
+ test_must_fail git config submodule.sub1.gitdir &&
+ test_must_fail git config submodule.sub2.gitdir &&
+ test_path_is_dir .git/modules/sub1 &&
+ test_path_is_dir .git/modules/sub2
+ ) &&
+ rm -rf repo-clone-recursive &&
+
+ # enable the extension, then retry the clone
+ test_config_global init.defaultSubmodulePathConfig true &&
+ git clone --recurse-submodules upstream repo-clone-recursive &&
+ (
+ cd repo-clone-recursive &&
+
+ # repository extension is enabled
+ git config extensions.submodulePathConfig >actual &&
+ echo "true" >expect &&
+ test_cmp expect actual &&
+
+ # gitdir configs exist for submodules
+ git config submodule.sub1.gitdir &&
+ git config submodule.sub2.gitdir &&
+ test_path_is_dir .git/modules/sub1 &&
+ test_path_is_dir .git/modules/sub2
+ )
+'
+
test_done