git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 2/4] introduce submodule.superprojectGitDir record

From
Emily Shaffer <emilyshaffer@google.com>
Date
Oct 13, 2021, 19:39 UTC
Message-ID
<YWc13By8SnIw1mEV@google.com>
In-Reply-To
<20210904172051.2858-1-matheus.bernardino@usp.br>
On Sat, Sep 04, 2021 at 02:20:51PM -0300, Matheus Tavares wrote:
Show 27 quoted lines
> 
> Emily Shaffer <emilyshaffer@google.com> wrote:
> >
> > diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
> > index d55f6262e9..d60fcd2c7d 100644
> > --- a/builtin/submodule--helper.c
> > +++ b/builtin/submodule--helper.c
> > @@ -1910,6 +1910,10 @@ static int module_clone(int argc, const char **argv, const char *prefix)
> >  		git_config_set_in_file(p, "submodule.alternateErrorStrategy",
> >  					   error_strategy);
> > 
> > +	git_config_set_in_file(p, "submodule.superprojectGitdir",
> > +			       relative_path(absolute_path(get_git_dir()),
> > +					     path, &sb));
> 
> This will be executed when cloning a submodule with
> `git submodule add <url/path> <path>`. Do we also want to set
> submodule.superprojectGitdir when adding a repository that already exists in
> the working tree as a submodule? I.e., something like:
> 
> git init super
> git init super/sub
> [ make commits in super/sub ]
> git -C super submodule add ./sub
> 
> I don't know if this workflow is so commonly used, though... It may not be
> worth the additional work.
Yeah, I think it is covered in the next patch with 'git submodule absorbgitdirs'.
Show 49 quoted lines
> 
> Another option, which I believe was suggested by Jonathan Nieder on the Review
> Club, is to change the code to absorb the gitdir when adding the local
> submodule. Then, the configuration would already be set by the
> `absorb_git_dir...()` function itself.
> 
> >  	free(sm_alternate);
> >  	free(error_strategy);
> > 
> > diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
> > index 4bc6b6c886..e407329d81 100755
> > --- a/t/t7400-submodule-basic.sh
> > +++ b/t/t7400-submodule-basic.sh
> > @@ -108,14 +108,18 @@ test_expect_success 'setup - repository to add submodules to' '
> >  submodurl=$(pwd -P)
> > 
> >  inspect() {
> > -	dir=$1 &&
> > -
> > -	git -C "$dir" for-each-ref --format='%(refname)' 'refs/heads/*' >heads &&
> > -	{ git -C "$dir" symbolic-ref HEAD || :; } >head &&
> > -	git -C "$dir" rev-parse HEAD >head-sha1 &&
> > -	git -C "$dir" update-index --refresh &&
> > -	git -C "$dir" diff-files --exit-code &&
> > -	git -C "$dir" clean -n -d -x >untracked
> > +	sub_dir=$1 &&
> > +	super_dir=$2 &&
> > +
> > +	git -C "$sub_dir" for-each-ref --format='%(refname)' 'refs/heads/*' >heads &&
> > +	{ git -C "$sub_dir" symbolic-ref HEAD || :; } >head &&
> > +	git -C "$sub_dir" rev-parse HEAD >head-sha1 &&
> > +	git -C "$sub_dir" update-index --refresh &&
> > +	git -C "$sub_dir" diff-files --exit-code &&
> > +	cached_super_dir="$(git -C "$sub_dir" config --get submodule.superprojectGitDir)" &&
> > +	[ "$(git -C "$super_dir" rev-parse --absolute-git-dir)" \
> > +		-ef "$sub_dir/$cached_super_dir" ] &&
> 
> To avoid the non-POSIX `-ef`, we could perhaps do something like: 
> 
> 	super_gitdir="$(git -C "$super_dir" rev-parse --absolute-git-dir)" &&
> 	cached_gitdir="$(git -C "$sub_dir" config --get submodule.superprojectGitDir)" &&
> 	test "$cached_gitdir" = "$(test-tool path-utils relative_path "$super_gitdir" "$PWD/$sub_dir")" &&
> 
> (We need the "$PWD/" at the last command because `path.c:relative_path()`
> returns the first argument as-is when one of the two paths given to it is
> absolute and the other is not.)
> 
> One bonus of testing the cached path this way is that we also check that
> it is indeed being stored as a relative path :)
Yep, that is what I settled on. Thanks.
 - Emily
Previous: Matheus TavaresNext: Emily Shaffer
Message 37 of 51 in “cache parent project's gitdir in submodules”
  1. 0/4 cache parent project's gitdir in submodulesEmily Shaffer, Jun 11, 2021
  2. 1/4 t7400-submodule-basic: modernize inspect() helperEmily Shaffer, Jun 11, 2021
  3. Junio C HamanoJun 14, 2021
  4. 2/4 introduce submodule.superprojectGitDir cacheEmily Shaffer, Jun 11, 2021
  5. Junio C HamanoJun 14, 2021
  6. Emily ShafferJun 15, 2021
  7. 3/4 submodule: cache superproject gitdir during absorbgitdirsEmily Shaffer, Jun 11, 2021
  8. Junio C HamanoJun 14, 2021
  9. 4/4 submodule: cache superproject gitdir during 'update'Emily Shaffer, Jun 11, 2021
  10. Junio C HamanoJun 14, 2021
  11. Emily ShafferJun 15, 2021
  12. Jacob KellerJun 12, 2021
  13. Junio C HamanoJun 14, 2021
  14. Emily ShafferJun 15, 2021
  15. 0/4 cache parent project's gitdir in submodulesEmily Shaffer, Jun 16, 2021
  16. 1/4 t7400-submodule-basic: modernize inspect() helperEmily Shaffer, Jun 16, 2021
  17. Jonathan TanJul 27, 2021
  18. Emily ShafferAug 19, 2021
  19. 2/4 introduce submodule.superprojectGitDir cacheEmily Shaffer, Jun 16, 2021
  20. Junio C HamanoJun 16, 2021
  21. Junio C HamanoJun 16, 2021
  22. Emily ShafferJun 18, 2021
  23. Emily ShafferJun 18, 2021
  24. Jonathan TanJul 27, 2021
  25. Emily ShafferAug 19, 2021
  26. Ævar Arnfjörð BjarmasonOct 14, 2021
  27. 3/4 submodule: cache superproject gitdir during absorbgitdirsEmily Shaffer, Jun 16, 2021
  28. 4/4 submodule: cache superproject gitdir during 'update'Emily Shaffer, Jun 16, 2021
  29. Jonathan TanJul 27, 2021
  30. Emily ShafferAug 19, 2021
  31. 0/4 cache parent project's gitdir in submodulesEmily Shaffer, Aug 19, 2021
  32. 1/4 t7400-submodule-basic: modernize inspect() helperEmily Shaffer, Aug 19, 2021
  33. 2/4 introduce submodule.superprojectGitDir recordEmily Shaffer, Aug 19, 2021
  34. Derrick StoleeAug 20, 2021
  35. Emily ShafferOct 13, 2021
  36. Matheus TavaresSep 4, 2021
  37. Emily ShafferOct 13, 2021
  38. 3/4 submodule: record superproject gitdir during absorbgitdirsEmily Shaffer, Aug 19, 2021
  39. Derrick StoleeAug 20, 2021
  40. Emily ShafferOct 13, 2021
  41. Matheus TavaresSep 4, 2021
  42. Emily ShafferOct 14, 2021
  43. 4/4 submodule: record superproject gitdir during 'update'Emily Shaffer, Aug 19, 2021
  44. Derrick StoleeAug 20, 2021
  45. Emily ShafferOct 14, 2021
  46. Junio C HamanoAug 19, 2021
  47. Derrick StoleeAug 20, 2021
  48. Emily ShafferOct 13, 2021
  49. Derrick StoleeOct 14, 2021
  50. Emily ShafferOct 14, 2021
  51. Matheus Tavares BernardinoSep 4, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.