Lukas Fleischer <lfleisc...@lfos.de> writes: > 2. transfer.hideRefs and receive.hideRefs do not seem to work with Git > namespaces in general. show_ref_cb() replaces each ref outside the > current namespace with ".have" before passing it to show_ref() which > in turn performs the ref_is_hidden() check. This has the nice side > effect that receive.hideRefs=.have does exactly what I want, however > it also means that hideRefs feature does not allow for excluding only > specific tags outside the current namespace. Is that intended? Can we > rely on Git always looking for ".have" in the hideRefs list in this > case?
When I asked 'Is transfer.hiderefs insufficient?', I wasn't expecting it to be usable out of box. It was a suggestion to build on top of it, instead of adding a parallel support for something specific to namespaces. For example, if the problem is that you cannot tell ref_is_hidden() what namespace the ref is from because it is called after running strip_namespace(), perhaps you can find a way to have the original "namespaced ref" specified on transfer.hiderefs and match them? Then in repository for project A, namespaced refs for project B can be excluded by specifying refs/namespaces/B/* on transfer.hiderefs. Perhaps along the lines of this? builtin/receive-pack.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index bcb624b..db0a99d 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -221,6 +221,15 @@ 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) { + const char *ns = get_git_namespace(); + + /* + * Give the "hiderefs" mechanism a chance to inspect and + * reject the namespaced ref itself. + */ + if (ns[0] && ref_is_hidden(path)) + return 0; + path = strip_namespace(path); /* * Advertise refs outside our current namespace as ".have" -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html