Show 67 quoted lines
> This series improves the git submodule remote lookup logic implemented in
> submodule--helper.
>
> A few cleanups are done first:
>
> * The starts_with_dot(_dot)_slash helper functions are moved to dir.h for
> re-use, as these are used both within submodule--helper.c and
> submodule-config.c
>
> * Several remote.c helper functions are refactored to take repository
> pointers, enabling use with a submodule repository pointer.
>
> * The branch_release logic is fixed so that it won't dereference
> branch->merge if it was never setup. This appeared to trigger in some
> cases if a submodule repository was passed into the read_config()
> function.
>
> Next, the submodule--helper.c logic in repo_get_default_remote() is
> refactored to remote.c helper functions. A new repo_default_remote() helper
> function is added which will try to find a default remote. This helper
> first tries to look up the remote from the checked out branch, then falls
> back to the only remote (if there is exactly one remote) before finally
> falling back to "origin".
>
> This improved logic is a good first step, but won't handle cases where
> there are multiple remotes, and when remotes have been renamed.
>
> For the final improvement, notice that the parent project already stores
> the URL for the submodule in its .git/config or .gitmodules file. This URL
> is what we use to set the remote in the first place when cloning.
>
> Add a repo_remote_from_url() helper which will iterate through the remotes
> and find the first remote with that URL. Use this in
> repo_get_default_remote() to first try and find a remote by its URL. If
> unsuccessful, we still keep the original fallback logic, in the off chance
> that the user has changed the URL from within the submodule.
>
> This method is more robust as it is less likely that the user has manually
> changed the submodule URL within the submodule but not also within the
> .git/config.
>
> With this change, all commands which need the submodule remote will first
> look up by URL before trying to use the fallback logic, and should now be
> able to find a suitable remote regardless of now they are renamed.
>
> Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
> ---
> Jacob Keller (6):
> dir: move starts_with_dot(_dot)_slash to dir.h
> remote: remove the_repository from some functions
> remote: check branch->merge before access in branch_release
> submodule--helper: improve logic for fallback remote name
> submodule: move get_default_remote_submodule()
> submodule: look up remotes by URL first
>
> dir.h | 23 ++++++++++
> remote.h | 3 ++
> builtin/submodule--helper.c | 101 ++++++++++++++++++++++--------------------
> remote.c | 104 ++++++++++++++++++++++++++++----------------
> submodule-config.c | 12 -----
> t/t7406-submodule-update.sh | 61 ++++++++++++++++++++++++++
> 6 files changed, 207 insertions(+), 97 deletions(-)
> ---
> base-commit: 4c0e625c091d4c648cec7319bafaed3cc81658e5
> change-id: 20250610-jk-submodule-helper-use-url-e55d3c379faf
>
> Best regards,