hideRefs: add support for matching full refs

In addition to matching stripped refs, one can now add hideRefs
patterns that the full (unstripped) ref is matched against. To
distinguish between stripped and full matches, those new patterns
must be prefixed with a circumflex (^).

This commit also removes support for the undocumented and unintended
hideRefs settings ".have" (suppressing all "have" lines) and
"capabilities^{}" (suppressing the capabilities line).

Signed-off-by: Lukas Fleischer <lfleischer@lfos.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Lukas Fleischer
2015-11-03 08:58:16 +01:00
committed by Junio C Hamano
parent 00b293e519
commit 78a766ab6e
5 changed files with 52 additions and 16 deletions

View File

@ -688,11 +688,12 @@ static void receive_needs(void)
}
/* return non-zero if the ref is hidden, otherwise 0 */
static int mark_our_ref(const char *refname, const struct object_id *oid)
static int mark_our_ref(const char *refname, const char *refname_full,
const struct object_id *oid)
{
struct object *o = lookup_unknown_object(oid->hash);
if (refname && ref_is_hidden(refname)) {
if (ref_is_hidden(refname, refname_full)) {
o->flags |= HIDDEN_REF;
return 1;
}
@ -700,10 +701,12 @@ static int mark_our_ref(const char *refname, const struct object_id *oid)
return 0;
}
static int check_ref(const char *refname, const struct object_id *oid,
static int check_ref(const char *refname_full, const struct object_id *oid,
int flag, void *cb_data)
{
mark_our_ref(strip_namespace(refname), oid);
const char *refname = strip_namespace(refname_full);
mark_our_ref(refname, refname_full, oid);
return 0;
}
@ -726,7 +729,7 @@ static int send_ref(const char *refname, const struct object_id *oid,
const char *refname_nons = strip_namespace(refname);
struct object_id peeled;
if (mark_our_ref(refname_nons, oid))
if (mark_our_ref(refname_nons, refname, oid))
return 0;
if (capabilities) {