Merge branch 'jk/allow-fetch-onelevel-refname' into maint
authorJunio C Hamano <gitster@pobox.com>
Thu, 13 Feb 2014 21:38:34 +0000 (13:38 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Feb 2014 21:38:34 +0000 (13:38 -0800)
"git clone" would fail to clone from a repository that has a ref
directly under "refs/", e.g. "refs/stash", because different
validation paths do different things on such a refname. Loosen the
client side's validation to allow such a ref.

* jk/allow-fetch-onelevel-refname:
fetch-pack: do not filter out one-level refs

fetch-pack.c
t/t5510-fetch.sh
index 1042448fa0b321e8826f0fdb69c89810c731cf5d..fab5e801755a9152aa19baf72b609052e1b32035 100644 (file)
@@ -507,7 +507,7 @@ static void filter_refs(struct fetch_pack_args *args,
                next = ref->next;
 
                if (!memcmp(ref->name, "refs/", 5) &&
-                   check_refname_format(ref->name + 5, 0))
+                   check_refname_format(ref->name, 0))
                        ; /* trash */
                else {
                        while (i < nr_sought) {
index 1f0f8e6827773b1bb9a419a822de2d1ebde8e37a..07986d94bdf2cebfc39ee25c990485f43cbf2999 100755 (executable)
@@ -594,4 +594,15 @@ test_expect_success 'all boundary commits are excluded' '
        test_bundle_object_count .git/objects/pack/pack-${pack##pack    }.pack 3
 '
 
+test_expect_success 'fetching a one-level ref works' '
+       test_commit extra &&
+       git reset --hard HEAD^ &&
+       git update-ref refs/foo extra &&
+       git init one-level &&
+       (
+               cd one-level &&
+               git fetch .. HEAD refs/foo
+       )
+'
+
 test_done