Message ID | 20210611225428.1208973-5-emilyshaffer@google.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | cache parent project's gitdir in submodules | expand |
Emily Shaffer <emilyshaffer@google.com> writes: > 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 <emilyshaffer@google.com> > --- > git-submodule.sh | 9 +++++++++ > t/t7406-submodule-update.sh | 10 ++++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/git-submodule.sh b/git-submodule.sh > index eb90f18229..ddda751cfa 100755 > --- a/git-submodule.sh > +++ b/git-submodule.sh > @@ -648,6 +648,15 @@ 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. > + > + sp_gitdir="$(git rev-parse --absolute-git-dir)" > + relative_gitdir="$(realpath --relative-to "$sm_path" "$sp_gitdir")" realpath may not exist on the target system. Discussions on the patch [*1*] may be of interest. It might be a good idea to push to your github repository to trigger CI on macOS (I am guessing that you do not test locally on macs from the two issues we saw in this series). Thanks. [Reference] *1* https://lore.kernel.org/git/20201206225349.3392790-3-sandals@crustytoothpaste.net/
On Mon, Jun 14, 2021 at 03:22:29PM +0900, Junio C Hamano wrote: > > Emily Shaffer <emilyshaffer@google.com> writes: > > > 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 <emilyshaffer@google.com> > > --- > > git-submodule.sh | 9 +++++++++ > > t/t7406-submodule-update.sh | 10 ++++++++++ > > 2 files changed, 19 insertions(+) > > > > diff --git a/git-submodule.sh b/git-submodule.sh > > index eb90f18229..ddda751cfa 100755 > > --- a/git-submodule.sh > > +++ b/git-submodule.sh > > @@ -648,6 +648,15 @@ 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. > > + > > + sp_gitdir="$(git rev-parse --absolute-git-dir)" > > + relative_gitdir="$(realpath --relative-to "$sm_path" "$sp_gitdir")" > > realpath may not exist on the target system. Discussions on the > patch [*1*] may be of interest. > > It might be a good idea to push to your github repository to trigger > CI on macOS (I am guessing that you do not test locally on macs from > the two issues we saw in this series). I typically do, sorry for forgetting to do so this time. > > Thanks. > > > [Reference] > > *1* > https://lore.kernel.org/git/20201206225349.3392790-3-sandals@crustytoothpaste.net/
diff --git a/git-submodule.sh b/git-submodule.sh index eb90f18229..ddda751cfa 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -648,6 +648,15 @@ 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. + + sp_gitdir="$(git rev-parse --absolute-git-dir)" + relative_gitdir="$(realpath --relative-to "$sm_path" "$sp_gitdir")" + 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 ff3ba5422e..96023cbb6a 100755 --- a/t/t7406-submodule-update.sh +++ b/t/t7406-submodule-update.sh @@ -1037,4 +1037,14 @@ test_expect_success 'submodule update --quiet passes quietness to merge/rebase' ) ' +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
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 <emilyshaffer@google.com> --- git-submodule.sh | 9 +++++++++ t/t7406-submodule-update.sh | 10 ++++++++++ 2 files changed, 19 insertions(+)