[PATCH v2 0/4] cache parent project's gitdir in submodules
- From
Emily Shaffer <emilyshaffer@google.com>
- Date
- Jun 16, 2021, 00:45 UTC
- Message-ID
- <20210616004508.87186-1-emilyshaffer@google.com>
- In-Reply-To
- <20210611225428.1208973-1-emilyshaffer@google.com>
The reception for this series seemed pretty good in v1, so I'm dropping the RFC.
Tested: https://github.com/nasamuffin/git/actions/runs/941100646
Sinec v1, mostly platform-friendliness fixes. Also added documentation for the new config option - wordsmithing help is always welcome.
- Emily
Emily Shaffer (4): t7400-submodule-basic: modernize inspect() helper introduce submodule.superprojectGitDir cache submodule: cache superproject gitdir during absorbgitdirs submodule: cache superproject gitdir during 'update'
Documentation/config/submodule.txt | 12 ++++++++ builtin/submodule--helper.c | 4 +++ git-submodule.sh | 10 ++++++ submodule.c | 10 ++++++ t/t7400-submodule-basic.sh | 49 ++++++++++++++---------------- t/t7406-submodule-update.sh | 10 ++++++ t/t7412-submodule-absorbgitdirs.sh | 9 +++++- 7 files changed, 77 insertions(+), 27 deletions(-)
Range-diff against v1:
1: d6284438fb = 1: a6718eea80 t7400-submodule-basic: modernize inspect() helper
2: 56470e2eab ! 2: 4cebe7bcb5 introduce submodule.superprojectGitDir cache
@@ Commit message
Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
+ ## Documentation/config/submodule.txt ##
+@@ Documentation/config/submodule.txt: submodule.alternateErrorStrategy::
+ `ignore`, `info`, `die`. Default is `die`. Note that if set to `ignore`
+ or `info`, and if there is an error with the computed alternate, the
+ clone proceeds as if no alternate was specified.
++
++submodule.superprojectGitDir::
++ The relative path from the submodule's worktree to the superproject's
++ gitdir. This config should only be present in projects which are
++ submodules, but is not guaranteed to be present in every submodule. It
++ is set automatically during submodule creation.
+++
++ In situations where more than one superproject references the same
++ submodule worktree, the value of this config and the behavior of
++ operations which use it are undefined. To reference a single project
++ from multiple superprojects, it is better to create a worktree of the
++ submodule for each superproject.
+
## builtin/submodule--helper.c ##
@@ builtin/submodule--helper.c: static int module_clone(int argc, const char **argv, const char *prefix)
git_config_set_in_file(p, "submodule.alternateErrorStrategy",
3: 42f954f523 ! 3: df97a9c2bb submodule: cache superproject gitdir during absorbgitdirs
@@ submodule.c: static void relocate_single_git_dir_into_superproject(const char *p
## t/t7412-submodule-absorbgitdirs.sh ##
@@ t/t7412-submodule-absorbgitdirs.sh: test_expect_success 'absorb the git dir' '
- test -d .git/modules/sub1 &&
git status >actual.1 &&
git -C sub1 rev-parse HEAD >actual.2 &&
-+ test . -ef "$(git -C sub1 config submodule.superprojectGitDir)" &&
test_cmp expect.1 actual.1 &&
- test_cmp expect.2 actual.2
+- test_cmp expect.2 actual.2
++ test_cmp expect.2 actual.2 &&
++
++ # make sure the submodule cached the superproject gitdir correctly
++ test-tool path-utils real_path . >expect &&
++ test-tool path-utils real_path \
++ "$(git -C sub1 config submodule.superprojectGitDir)" >actual &&
++
++ test_cmp expect actual
'
+
+ test_expect_success 'absorbing does not fail for deinitialized submodules' '
4: 4f55ab42c7 ! 4: a3f3be58ad submodule: cache superproject gitdir during 'update'
@@ git-submodule.sh: cmd_update()
+ # 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)"
+
-+ 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"
+
@@ git-submodule.sh: cmd_update()
(
## t/t7406-submodule-update.sh ##
-@@ t/t7406-submodule-update.sh: test_expect_success 'submodule update --quiet passes quietness to merge/rebase'
+@@ t/t7406-submodule-update.sh: test_expect_success 'submodule update --quiet passes quietness to fetch with a s
)
'
-- 2.32.0.272.g935e593368-goog