Merge branch 'jk/proto-v2-hidden-refs-fix'
authorJunio C Hamano <gitster@pobox.com>
Tue, 29 Jan 2019 20:47:54 +0000 (12:47 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 29 Jan 2019 20:47:54 +0000 (12:47 -0800)
The v2 upload-pack protocol implementation failed to honor
hidden-ref configuration, which has been corrected.
An earlier attempt reverted out of 'next'.

* jk/proto-v2-hidden-refs-fix:
upload-pack: support hidden refs with protocol v2

ls-refs.c
t/t5512-ls-remote.sh
index a06f12eca8d6f9816c481f1f445791388d53039c..9c9a7c647f26249d68319786449eefd7d6de1eba 100644 (file)
--- a/ls-refs.c
+++ b/ls-refs.c
@@ -5,6 +5,7 @@
 #include "argv-array.h"
 #include "ls-refs.h"
 #include "pkt-line.h"
+#include "config.h"
 
 /*
  * Check if one of the prefixes is a prefix of the ref.
@@ -40,6 +41,9 @@ static int send_ref(const char *refname, const struct object_id *oid,
        const char *refname_nons = strip_namespace(refname);
        struct strbuf refline = STRBUF_INIT;
 
+       if (ref_is_hidden(refname_nons, refname))
+               return 0;
+
        if (!ref_match(&data->prefixes, refname))
                return 0;
 
@@ -69,6 +73,16 @@ static int send_ref(const char *refname, const struct object_id *oid,
        return 0;
 }
 
+static int ls_refs_config(const char *var, const char *value, void *data)
+{
+       /*
+        * We only serve fetches over v2 for now, so respect only "uploadpack"
+        * config. This may need to eventually be expanded to "receive", but we
+        * don't yet know how that information will be passed to ls-refs.
+        */
+       return parse_hide_refs_config(var, value, "uploadpack");
+}
+
 int ls_refs(struct repository *r, struct argv_array *keys,
            struct packet_reader *request)
 {
@@ -76,6 +90,8 @@ int ls_refs(struct repository *r, struct argv_array *keys,
 
        memset(&data, 0, sizeof(data));
 
+       git_config(ls_refs_config, NULL);
+
        while (packet_reader_read(request) != PACKET_READ_FLUSH) {
                const char *arg = request->line;
                const char *out;
index cd9e60632d09e5fd21255261be5de457dc7f409b..ced15ae1224247355125fcbad7ad2184f9861cbe 100755 (executable)
@@ -204,6 +204,12 @@ test_expect_success 'overrides work between mixed transfer/upload-pack hideRefs'
        grep refs/tags/magic actual
 '
 
+test_expect_success 'protocol v2 supports hiderefs' '
+       test_config uploadpack.hiderefs refs/tags &&
+       git -c protocol.version=2 ls-remote . >actual &&
+       ! grep refs/tags actual
+'
+
 test_expect_success 'ls-remote --symref' '
        git fetch origin &&
        cat >expect <<-EOF &&