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

[PATCH v3 0/4] cache parent project's gitdir in submodules

From
Emily Shaffer <emilyshaffer@google.com>
Date
Aug 19, 2021, 20:09 UTC
Message-ID
<20210819200953.2105230-1-emilyshaffer@google.com>
In-Reply-To
<20210616004508.87186-1-emilyshaffer@google.com>

Since v2, mostly documentation changes and a handful of small nits from Junio and Jonathan Tan. Thanks for the reviews, both.

CI run here: https://github.com/nasamuffin/git/actions/runs/1147984974
 - Emily
Emily Shaffer (4):
  t7400-submodule-basic: modernize inspect() helper
  introduce submodule.superprojectGitDir record
  submodule: record superproject gitdir during absorbgitdirs
  submodule: record superproject gitdir during 'update'
 Documentation/config/submodule.txt | 15 ++++++++++
 builtin/submodule--helper.c        |  4 +++
 git-submodule.sh                   | 10 +++++++
 submodule.c                        | 10 +++++++
 t/t7400-submodule-basic.sh         | 48 ++++++++++++++----------------
 t/t7406-submodule-update.sh        | 10 +++++++
 t/t7412-submodule-absorbgitdirs.sh |  9 +++++-
 7 files changed, 79 insertions(+), 27 deletions(-)
Range-diff against v2:
1:  a6718eea80 ! 1:  f1236dc9d7 t7400-submodule-basic: modernize inspect() helper
    @@ t/t7400-submodule-basic.sh: test_expect_success 'setup - repository to add submo
     +	git -C "$dir" clean -n -d -x >untracked
      }
      
    -+
      test_expect_success 'submodule add' '
    - 	echo "refs/heads/main" >expect &&
    - 
     @@ t/t7400-submodule-basic.sh: test_expect_success 'submodule add' '
      	) &&
      
2:  4cebe7bcb5 ! 2:  2caf9eb8ee introduce submodule.superprojectGitDir cache
    @@ Metadata
     Author: Emily Shaffer <emilyshaffer@google.com>
     
      ## Commit message ##
    -    introduce submodule.superprojectGitDir cache
    +    introduce submodule.superprojectGitDir record
     
         Teach submodules a reference to their superproject's gitdir. This allows
         us to A) know that we're running from a submodule, and B) have a
    @@ Commit message
         superproject directory around on the filesystem without breaking the
         submodule's cache.
     
    -    Since this cached value is only introduced during new submodule creation
    +    Since this hint value is only introduced during new submodule creation
         via `git submodule add`, though, there is more work to do to allow the
    -    cache to be created at other times.
    +    record to be created at other times.
    +
    +    If the new config is present, we can do some optional value-added
    +    behavior, like letting "git status" print additional info about the
    +    submodule's status in relation to its superproject, or like letting the
    +    superproject and submodule share an additional config file separate from
    +    either one's local config.
     
         Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
    +    Helped-by: Junio C Hamano <gitster@pobox.com>
     
      ## Documentation/config/submodule.txt ##
     @@ Documentation/config/submodule.txt: submodule.alternateErrorStrategy::
    @@ Documentation/config/submodule.txt: submodule.alternateErrorStrategy::
      	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.
    ++	The relative path from the submodule's worktree to its superproject's
    ++	gitdir. When Git is run in a repository, it usually makes no difference
    ++	whether this repository is standalone or a submodule, but if this
    ++	configuration variable is present, additional behavior may be possible,
    ++	such as "git status" printing additional information about this
    ++	submodule's status with respect to its superproject. This config should
    ++	only be present in projects which are submodules, but is not guaranteed
    ++	to be present in every submodule, so only optional value-added behavior
    ++	should be linked to it. 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.
    ++	Because of this configuration variable, it is forbidden to use the
    ++	same submodule worktree shared by multiple superprojects.
     
      ## builtin/submodule--helper.c ##
     @@ builtin/submodule--helper.c: static int module_clone(int argc, const char **argv, const char *prefix)
    @@ t/t7400-submodule-basic.sh: test_expect_success 'setup - repository to add submo
     +	git -C "$sub_dir" clean -n -d -x >untracked
      }
      
    - 
    + test_expect_success 'submodule add' '
     @@ t/t7400-submodule-basic.sh: test_expect_success 'submodule add' '
      	) &&
      
3:  df97a9c2bb ! 3:  d278568a8e submodule: cache superproject gitdir during absorbgitdirs
    @@ Metadata
     Author: Emily Shaffer <emilyshaffer@google.com>
     
      ## Commit message ##
    -    submodule: cache superproject gitdir during absorbgitdirs
    +    submodule: record superproject gitdir during absorbgitdirs
     
    -    Already during 'git submodule add' we cache a pointer to the
    +    Already during 'git submodule add' we record a pointer to the
         superproject's gitdir. However, this doesn't help brand-new
         submodules created with 'git init' and later absorbed with 'git
         submodule absorbgitdir'. Let's start adding that pointer during 'git
4:  a3f3be58ad ! 4:  6866c36620 submodule: cache superproject gitdir during 'update'
    @@ Metadata
     Author: Emily Shaffer <emilyshaffer@google.com>
     
      ## Commit message ##
    -    submodule: cache superproject gitdir during 'update'
    +    submodule: record superproject gitdir during 'update'
     
    -    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
    +    A recorded hint 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 record that info - it might
    +    be useful to update the hint. 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>
-- 
2.33.0.rc2.250.ged5fa647cd-goog
Previous: Emily ShafferNext: Emily Shaffer
Message 31 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.