Subject: Submodules UX overhaul update (was: What's cooking in git.git (Oct 2021, #03; Mon, 11))

From: Emily Shaffer <[email-masked]>
Date: Tue, 12 Oct 2021 15:07:06 -0700

As I promised in IRC yesterday, here's an attempt to filter this into a
submodules newsletter of sorts.

For context on the broader submodules effort I'm discussing in this
note, please see the design doc:
https://lore.kernel.org/git/[email-masked]/

I'm aware there are other submodule efforts ongoing too, but in this
letter I've highlighted ones that are necessary for the above-linked
design doc. Selfish, I know. ;)

On Mon, Oct 11, 2021 at 05:14:14PM -0700, Junio C Hamano wrote:
> [Stalled]
> 
> * ar/submodule-update (2021-09-20) 8 commits
>  . submodule--helper: rename helper functions
>  . submodule--helper: remove unused helpers
>  . submodule--helper: remove update-clone subcommand
>  . submodule: move core cmd_update() logic to C
>  . submodule--helper: refactor get_submodule_displaypath()
>  . submodule--helper: rename helpers for update-clone
>  . submodule--helper: get remote names from any repository
>  . submodule--helper: split up ensure_core_worktree()
> 
>  Rewrite of "git submodule update" in C.
> 
>  Kicked out of 'seen' to make room for es/superproject-aware-submodules
>  which is among the topics this topic stomps on.

Mentioning this series in the "newsletter" since I'm aware that I'm
blocking it with es/superproject-aware-submodules. I have it open in
another tab as I type and plan to send a reroll today or tomorrow.

> --------------------------------------------------
> [Cooking]
> 
> * es/superproject-aware-submodules (2021-08-19) 5 commits
>  - fixup! introduce submodule.superprojectGitDir record
>  - submodule: record superproject gitdir during 'update'
>  - submodule: record superproject gitdir during absorbgitdirs
>  - introduce submodule.superprojectGitDir record
>  - t7400-submodule-basic: modernize inspect() helper
> 
>  A configuration variable in a submodule points at the location of
>  the superproject it is bound to (RFC).
> 
>  Brought back to 'seen' to see if it still plays well with the rest
>  of 'seen', without the conflicting ar/submodule-update topic.

Like I said above - planning to send a reroll today or tomorrow.

> * ab/config-based-hooks-1 (2021-09-27) 8 commits
>   (merged to 'next' on 2021-10-06 at d05325ed35)
>  + hook-list.h: add a generated list of hooks, like config-list.h
>  + hook.c users: use "hook_exists()" instead of "find_hook()"
>  + hook.c: add a hook_exists() wrapper and use it in bugreport.c
>  + hook.[ch]: move find_hook() from run-command.c to hook.c
>  + Makefile: remove an out-of-date comment
>  + Makefile: don't perform "mv $@+ $@" dance for $(GENERATED_H)
>  + Makefile: stop hardcoding {command,config}-list.h
>  + Makefile: mark "check" target as .PHONY
> 
>  Mostly preliminary clean-up in the hook API.
> 
>  Will merge to 'master'.

We saw this make it in to 'next' last week - woohoo! (Yes, this is part
of the critical path for the planned submodulesy work.)

Looks like the next chunk is at
https://lore.kernel.org/git/[email-masked]/
- I will try and take a look this week (but probably cannot til ~Thursday).

> * jt/no-abuse-alternate-odb-for-submodules (2021-10-08) 9 commits
>  - submodule: trace adding submodule ODB as alternate
>  - submodule: pass repo to check_has_commit()
>  - object-file: only register submodule ODB if needed
>  - merge-{ort,recursive}: remove add_submodule_odb()
>  - refs: peeling non-the_repository iterators is BUG
>  - refs: teach arbitrary repo support to iterators
>  - refs: plumb repo into ref stores
>  - Merge branch 'jk/ref-paranoia' into jt/no-abuse-alternate-odb-for-submodules
>  - Merge branch 'jt/add-submodule-odb-clean-up' into jt/no-abuse-alternate-odb-for-submodules
> 
>  Follow through the work to use the repo interface to access
>  submodule objects in-process, instead of abusing the alternate
>  object database interface.
> 
>  Will merge to 'next'?

I asked around and it seems like:
 1. Josh Steadmon will take a last pass at the latest;
 2. Jonathan Tan thinks it's pretty much ready.

Thanks.

Besides what was in the What's Cooking mail, we have a couple more
series on our minds:

https://lore.kernel.org/git/[email-masked]/

 Introducing a new value for core.autosetupmerge, "inherit". This eases
 our ability to push to the right place in submodules when running 'git
 push' recursively from the superproject.

 However, this topic is not ready for review - Josh is planning a
 re-roll later in the week.

https://lore.kernel.org/git/[email-masked]/

 Pre-work for 'git branch --recurse-submodules' support. This one is
 mostly plumbing through `struct repo` and replacing a few instances of
 `the_repository`. Glen is planning a reroll shortly.

Additionally, later this week Jonathan Tan is planning on sending an RFC
to allow a config 'includeIf' to gate on remote URLs. This will be handy
for us (Google) to do some pilot groups more efficiently, but I imagine
will also be useful for external users (especially combined with the
completed config-based-hooks feature).

 - Emily