Merge branch 'jk/proto-v2-ref-prefix-fix'

"git fetch" over protocol v2 sent an incorrect ref prefix request
to the server and made "git pull" with configured fetch refspec
that does not cover the remote branch to merge with fail, which has
been corrected.

* jk/proto-v2-ref-prefix-fix:
  fetch: add branch.*.merge to default ref-prefix extension
  fetch: stop checking for NULL transport->remote in do_fetch()
This commit is contained in:
Junio C Hamano 2022-09-15 16:09:47 -07:00
commit ca20a44bc5
2 changed files with 32 additions and 3 deletions

View file

@ -1617,9 +1617,21 @@ static int do_fetch(struct transport *transport,
break;
}
}
} else if (transport->remote && transport->remote->fetch.nr)
refspec_ref_prefixes(&transport->remote->fetch,
&transport_ls_refs_options.ref_prefixes);
} else {
struct branch *branch = branch_get(NULL);
if (transport->remote->fetch.nr)
refspec_ref_prefixes(&transport->remote->fetch,
&transport_ls_refs_options.ref_prefixes);
if (branch_has_merge_config(branch) &&
!strcmp(branch->remote_name, transport->remote->name)) {
int i;
for (i = 0; i < branch->merge_nr; i++) {
strvec_push(&transport_ls_refs_options.ref_prefixes,
branch->merge[i]->src);
}
}
}
if (tags == TAGS_SET || tags == TAGS_DEFAULT) {
must_list_refs = 1;

View file

@ -218,6 +218,23 @@ test_expect_success 'fail if upstream branch does not exist' '
test_cmp expect file
'
test_expect_success 'fetch upstream branch even if refspec excludes it' '
# the branch names are not important here except that
# the first one must not be a prefix of the second,
# since otherwise the ref-prefix protocol extension
# would match both
git branch in-refspec HEAD^ &&
git branch not-in-refspec HEAD &&
git init -b in-refspec downstream &&
git -C downstream remote add -t in-refspec origin "file://$(pwd)/.git" &&
git -C downstream config branch.in-refspec.remote origin &&
git -C downstream config branch.in-refspec.merge refs/heads/not-in-refspec &&
git -C downstream pull &&
git rev-parse --verify not-in-refspec >expect &&
git -C downstream rev-parse --verify HEAD >actual &&
test_cmp expect actual
'
test_expect_success 'fail if the index has unresolved entries' '
git checkout -b third second^ &&
test_when_finished "git checkout -f copy && git branch -D third" &&