*Note to maintainer*: See "Interactions with other series". Given the work on ab/submodule-helper-prep-only, I'm sending this early for feedback, and to see if I can avoid blocking Ævar's follow-up work. This is pretty much done, but I haven't scrutinized the patches too closely to see if all of the relevant paths are tested. The main motivation behind this is the partial clone bug demonstrated by the test in Patch 3/4, but instead of just fixing that one issue, I'd prefer to get rid of this class of error once and for all. = Description When we introduced the internal-only "--super-prefix" in 74866d7579 (git: make super-prefix option, 2016-10-07), we specified that commands must prefix paths by it, and pathspecs must be parsed relative to it. That commit also includes safeguards to ensure that "--super-prefix" is used correctly, namely: - Only commands marked SUPPORT_SUPER_PREFIX can be invoked with "--super-prefix". - The super prefix is propagated via the GIT_INTERNAL_SUPER_PREFIX env var, so a non-SUPPORT_SUPER_PREFIX command cannot be invoked by a SUPPORT_SUPER_PREFIX one. However, its use is inconsistent, which is a strong reason to consider using better-scoped flags instead. For example.. - Of the 4 commands that are SUPPORT_SUPER_PREFIX, only "read-tree" and "submodule--helper" do anything useful with it. "fsmonitor--daemon" has it to avoid the SUPPORT_SUPER_PREFIX warning [1]. "checkout--worker" doesn't have a documented reason, but since it can be invoked by "read-tree", it's presumably also a workaround. - "read-tree" and "submodule--helper" use different values for the super prefix; "read-tree" passes the path from the root of the superproject's tree to the submodule's gitlink, while "submodule--helper" passes the relative path of the original CWD to the submodule. - "submodule--helper" doesn't use "--super-prefix" to parse pathspecs, only to display paths. This series replaces the top-level "--super-prefix" with better-scoped, per-command flags. = Interactions with other series As noted in the conversation starting at [2], the submodule--helper bits in this series have substantial overlap with ab/submodule-helper-prep-only and the work that series is prep for. I've based this series off ab/submodule-helper-prep-only, since the conversion of builtin/submodule--helper.c to use options parsing makes patch 1 much easier to reason about. Ævar: The patch of interest is 1/4, which removes the super prefix check from submodule--helper. Hopefully you find this useful, I strongly suspect that it will save time and churn for us to move this series forward and to base your follow up work on this. But if this does end up stalling, however, I'm happy to rebase this on top of your follow up work. = Patch summary - Patch 1/4 introduces a "--toplevel-cwd-prefix" flag for "git submodule--helper" (replacing "--super-prefix" for "git submodule--helper"). - Patches 2-3/4 refactors "--submodule-prefix" for "git fetch" and reuses that implementation for "git read-tree" (replacing "--super-prefix" for "git read-tree"). - Patch 4 drops "--super-prefix" and a now-defunct fsmonitor test. [1]: 53fcfbc84f (fsmonitor--daemon: allow --super-prefix argument, 2022-05-26) [2]: https://lore.kernel.org/git/221104.86wn8bzeus.gmgdl@xxxxxxxxxxxxxxxxxxx Glen Choo (4): submodule--helper: teach --toplevel-cwd-prefix fetch: refactor --submodule-prefix read-tree: teach --submodule-prefix git: remove --super-prefix Documentation/fetch-options.txt | 5 -- Documentation/git.txt | 7 +-- builtin.h | 4 -- builtin/fetch.c | 7 ++- builtin/read-tree.c | 4 ++ builtin/submodule--helper.c | 52 ++++++++----------- cache.h | 2 - environment.c | 13 ----- git.c | 40 +++----------- repository.c | 1 + repository.h | 9 +++- submodule.c | 83 ++++++++++++++++++------------ submodule.h | 20 ++++++- t/t1001-read-tree-m-2way.sh | 4 +- t/t5616-partial-clone.sh | 43 ++++++++++++++++ t/t7412-submodule-absorbgitdirs.sh | 13 ++++- t/t7527-builtin-fsmonitor.sh | 50 ------------------ unpack-trees.c | 32 ++++++------ 18 files changed, 187 insertions(+), 202 deletions(-) base-commit: 69d94464e14de859ff56bcde7ebe0132201eceb9 -- 2.38.1.431.g37b22c650d-goog