Skip to content

Commit

Permalink
submodule: correct remote name with fetch
Browse files Browse the repository at this point in the history
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
grooverdan authored and dscho committed Oct 21, 2024
1 parent ffd5653 commit 758abb9
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
9 changes: 8 additions & 1 deletion builtin/submodule--helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
20 changes: 20 additions & 0 deletions t/t5572-pull-submodule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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" &&
Expand All @@ -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

0 comments on commit 758abb9

Please sign in to comment.