Merge branch 'jk/HEAD-symref-in-xfer-namespaces' into maint
The server side support for "git fetch" used to show incorrect value for the HEAD symbolic ref when the namespace feature is in use, which has been corrected. * jk/HEAD-symref-in-xfer-namespaces: upload-pack: strip namespace from symref data
This commit is contained in:
commit
5ca0db3fca
@ -57,7 +57,8 @@ static int send_ref(const char *refname, const struct object_id *oid,
|
|||||||
if (!symref_target)
|
if (!symref_target)
|
||||||
die("'%s' is a symref but it is not?", refname);
|
die("'%s' is a symref but it is not?", refname);
|
||||||
|
|
||||||
strbuf_addf(&refline, " symref-target:%s", symref_target);
|
strbuf_addf(&refline, " symref-target:%s",
|
||||||
|
strip_namespace(symref_target));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->peel) {
|
if (data->peel) {
|
||||||
|
@ -124,4 +124,32 @@ test_expect_success 'try to update a hidden full ref' '
|
|||||||
test_must_fail git -C original push pushee-namespaced master
|
test_must_fail git -C original push pushee-namespaced master
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'set up ambiguous HEAD' '
|
||||||
|
git init ambiguous &&
|
||||||
|
(
|
||||||
|
cd ambiguous &&
|
||||||
|
git commit --allow-empty -m foo &&
|
||||||
|
git update-ref refs/namespaces/ns/refs/heads/one HEAD &&
|
||||||
|
git update-ref refs/namespaces/ns/refs/heads/two HEAD &&
|
||||||
|
git symbolic-ref refs/namespaces/ns/HEAD \
|
||||||
|
refs/namespaces/ns/refs/heads/two
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'clone chooses correct HEAD (v0)' '
|
||||||
|
GIT_NAMESPACE=ns git -c protocol.version=0 \
|
||||||
|
clone ambiguous ambiguous-v0 &&
|
||||||
|
echo refs/heads/two >expect &&
|
||||||
|
git -C ambiguous-v0 symbolic-ref HEAD >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'clone chooses correct HEAD (v2)' '
|
||||||
|
GIT_NAMESPACE=ns git -c protocol.version=2 \
|
||||||
|
clone ambiguous ambiguous-v2 &&
|
||||||
|
echo refs/heads/two >expect &&
|
||||||
|
git -C ambiguous-v2 symbolic-ref HEAD >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
@ -1037,8 +1037,8 @@ static int find_symref(const char *refname, const struct object_id *oid,
|
|||||||
symref_target = resolve_ref_unsafe(refname, 0, NULL, &flag);
|
symref_target = resolve_ref_unsafe(refname, 0, NULL, &flag);
|
||||||
if (!symref_target || (flag & REF_ISSYMREF) == 0)
|
if (!symref_target || (flag & REF_ISSYMREF) == 0)
|
||||||
die("'%s' is a symref but it is not?", refname);
|
die("'%s' is a symref but it is not?", refname);
|
||||||
item = string_list_append(cb_data, refname);
|
item = string_list_append(cb_data, strip_namespace(refname));
|
||||||
item->util = xstrdup(symref_target);
|
item->util = xstrdup(strip_namespace(symref_target));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user