Re: [PATCH v2 3/4] Add support for matching full refs in hideRefs
From: Junio C Hamano <hidden>
Date: 2016-06-15 23:07:10
Lukas Fleischer [off-list ref] writes:
quoted hunk
static void show_ref(const char *path, const unsigned char *sha1) { - if (ref_is_hidden(path)) - return; - if (sent_capabilities) { packet_write(1, "%s %s\n", sha1_to_hex(sha1), path); } else {@@ -219,9 +216,14 @@ static void show_ref(const char *path, const unsigned char *sha1) } } -static int show_ref_cb(const char *path, const struct object_id *oid, int flag, void *unused) +static int show_ref_cb(const char *path_full, const struct object_id *oid, + int flag, void *unused) { - path = strip_namespace(path); + const char *path = strip_namespace(path_full); + + if (ref_is_hidden(path, path_full)) + return 1; +
These two hunks are doing a bit more than the primary topic of this step, aren't they? The semantics of "hideRefs" used to be that "refs can be hidden from ls-remote" (i.e. prevents fetching, avoids contaminating "--mirror") and "refs can be hidden from 'push'", but the objects being known tips of histories that are complete, they still participate in common ancestor discovery.
quoted hunk
diff --git a/Documentation/config.txt b/Documentation/config.txt index 3da97a1..91ed6a5 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt@@ -2690,7 +2690,8 @@ the prefix `refs/heads/master` is specified in `transfer.hideRefs` and the current namespace is `foo`, then `refs/namespaces/foo/refs/heads/master` is omitted from the advertisements but `refs/heads/master` and `refs/namespaces/bar/refs/heads/master` are still advertised as so-called -"have" lines. +"have" lines. In order to match refs before stripping, add a `^` in front of +the ref name. If you combine `!` and `^`, `!` must be specified first.
I think the changes in the above two hunks prevent the hidden refs from participating in common ancestor discovery (which is probably a good thing), making the above description stale.