Message ID | 20241009033257.1316690-1-daniel@mariadb.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 0c1a9987da0507050d9dba2adba208d14b944b3a |
Headers | show |
Series | [v3] submodule: correct remote name with fetch | expand |
Daniel Black <daniel@mariadb.org> writes: > The code fetches the submodules remote based on the superproject remote name > instead of the submodule remote name[1]. > > Instead of grabbing the default remote of the superproject repository, ask > the default remote of the submodule we are going to run 'git fetch' in. > > 1. https://lore.kernel.org/git/ZJR5SPDj4Wt_gmRO@pweza/ > > Signed-off-by: Daniel Black <daniel@mariadb.org> > --- > builtin/submodule--helper.c | 9 ++++++++- > t/t5572-pull-submodule.sh | 20 ++++++++++++++++++++ > 2 files changed, 28 insertions(+), 1 deletion(-) Excellent. Will queue. Thanks. > diff --git a/t/t5572-pull-submodule.sh b/t/t5572-pull-submodule.sh > index 916e58c166..9b6cf8d88b 100755 > --- a/t/t5572-pull-submodule.sh > +++ b/t/t5572-pull-submodule.sh > @@ -230,6 +230,7 @@ test_expect_success 'branch has no merge base with remote-tracking counterpart' > > test_create_repo a-submodule && > test_commit -C a-submodule foo && > + test_commit -C a-submodule bar && > > test_create_repo parent && > git -C parent submodule add "$(pwd)/a-submodule" && > @@ -246,4 +247,23 @@ test_expect_success 'branch has no merge base with remote-tracking counterpart' > git -C child pull --recurse-submodules --rebase > ' > > +test_expect_success 'fetch submodule remote of different name from superproject' ' > + git -C child remote rename origin o1 && > + git -C child submodule update --init && > + > + # Needs to create unreachable commit from current master branch. > + git -C a-submodule checkout -b newmain HEAD^ && > + test_commit -C a-submodule echo && > + test_commit -C a-submodule moreecho && > + subc=$(git -C a-submodule rev-parse --short HEAD) && > + > + git -C parent/a-submodule fetch && > + git -C parent/a-submodule checkout "$subc" && > + git -C parent commit -m "update submodule" a-submodule && > + git -C a-submodule reset --hard HEAD^^ && > + > + git -C child pull --no-recurse-submodules && > + git -C child submodule update > +' > + > test_done
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index dc89488a7d..b6b5f1ebde 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -2333,7 +2333,14 @@ static int fetch_in_submodule(const char *module_path, int depth, int quiet, strvec_pushf(&cp.args, "--depth=%d", depth); if (oid) { char *hex = oid_to_hex(oid); - char *remote = get_default_remote(); + char *remote; + int code; + + code = get_default_remote_submodule(module_path, &remote); + if (code) { + child_process_clear(&cp); + return code; + } strvec_pushl(&cp.args, remote, hex, NULL); free(remote); diff --git a/t/t5572-pull-submodule.sh b/t/t5572-pull-submodule.sh index 916e58c166..9b6cf8d88b 100755 --- a/t/t5572-pull-submodule.sh +++ b/t/t5572-pull-submodule.sh @@ -230,6 +230,7 @@ test_expect_success 'branch has no merge base with remote-tracking counterpart' test_create_repo a-submodule && test_commit -C a-submodule foo && + test_commit -C a-submodule bar && test_create_repo parent && git -C parent submodule add "$(pwd)/a-submodule" && @@ -246,4 +247,23 @@ test_expect_success 'branch has no merge base with remote-tracking counterpart' git -C child pull --recurse-submodules --rebase ' +test_expect_success 'fetch submodule remote of different name from superproject' ' + git -C child remote rename origin o1 && + git -C child submodule update --init && + + # Needs to create unreachable commit from current master branch. + git -C a-submodule checkout -b newmain HEAD^ && + test_commit -C a-submodule echo && + test_commit -C a-submodule moreecho && + subc=$(git -C a-submodule rev-parse --short HEAD) && + + git -C parent/a-submodule fetch && + git -C parent/a-submodule checkout "$subc" && + git -C parent commit -m "update submodule" a-submodule && + git -C a-submodule reset --hard HEAD^^ && + + git -C child pull --no-recurse-submodules && + git -C child submodule update +' + test_done
The code fetches the submodules remote based on the superproject remote name instead of the submodule remote name[1]. Instead of grabbing the default remote of the superproject repository, ask the default remote of the submodule we are going to run 'git fetch' in. 1. https://lore.kernel.org/git/ZJR5SPDj4Wt_gmRO@pweza/ Signed-off-by: Daniel Black <daniel@mariadb.org> --- builtin/submodule--helper.c | 9 ++++++++- t/t5572-pull-submodule.sh | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-)