A cached path to the superproject's gitdir might be added during 'git
submodule add', but in some cases - like submodules which were created
before 'git submodule add' learned to cache that info - it might be
useful to update the cache. Let's do it during 'git submodule update',
when we already have a handle to the superproject while calling
operations on the submodules.
Signed-off-by: Emily Shaffer <redacted>
---
git-submodule.sh | 10 ++++++++++
t/t7406-submodule-update.sh | 10 ++++++++++
2 files changed, 20 insertions(+)
diff --git a/git-submodule.sh b/git-submodule.sh
index 4678378424..f98dcc16ae 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -648,6 +648,16 @@ cmd_update()
fi
fi
+ # Cache a pointer to the superproject's gitdir. This may have
+ # changed, so rewrite it unconditionally. Writes it to worktree
+ # if applicable, otherwise to local.
+ relative_gitdir="$(git rev-parse --path-format=relative \
+ --prefix "${sm_path}" \
+ --git-dir)"
+
+ git -C "$sm_path" config --worktree \
+ submodule.superprojectgitdir "$relative_gitdir"
+
if test -n "$recursive"
then
(diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
index f4f61fe554..c39821ba8e 100755
--- a/t/t7406-submodule-update.sh
+++ b/t/t7406-submodule-update.sh
@@ -1061,4 +1061,14 @@ test_expect_success 'submodule update --quiet passes quietness to fetch with a s
)
'
+test_expect_success 'submodule update adds superproject gitdir to older repos' '
+ (cd super &&
+ git -C submodule config --unset submodule.superprojectGitdir &&
+ git submodule update &&
+ echo "../.git" >expect &&
+ git -C submodule config submodule.superprojectGitdir >actual &&
+ test_cmp expect actual
+ )
+'
+
test_done
--
2.32.0.272.g935e593368-goog