Merge branch 'mh/fetch-into-shallow' into maint
authorJunio C Hamano <gitster@pobox.com>
Thu, 27 Jun 2013 21:37:41 +0000 (14:37 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Jun 2013 21:37:41 +0000 (14:37 -0700)
* mh/fetch-into-shallow:
t5500: add test for fetching with an unknown 'shallow'
upload-pack: ignore 'shallow' lines with unknown obj-ids

Documentation/technical/pack-protocol.txt
t/t5500-fetch-pack.sh
upload-pack.c
index f1a51edf47f94f45ce916f7800924e6f135800e2..b898e97988311fe411c02f9f3fe45608e862a71a 100644 (file)
@@ -228,8 +228,7 @@ obtained through ref discovery.
 The client MUST write all obj-ids which it only has shallow copies
 of (meaning that it does not have the parents of a commit) as
 'shallow' lines so that the server is aware of the limitations of
-the client's history. Clients MUST NOT mention an obj-id which
-it does not know exists on the server.
+the client's history.
 
 The client now sends the maximum commit history depth it wants for
 this transaction, which is the number of commits it wants from the
index d574085696e81522669119c9b7480ba4c682c968..6133d9ed13804d1cda4044e906ada1065fbad4a6 100755 (executable)
@@ -373,6 +373,20 @@ test_expect_success 'clone shallow with packed refs' '
        test_cmp count8.expected count8.actual
 '
 
+test_expect_success 'fetch in shallow repo unreachable shallow objects' '
+       (
+               git clone --bare --branch B --single-branch "file://$(pwd)/." no-reflog &&
+               git clone --depth 1 "file://$(pwd)/no-reflog" shallow9 &&
+               cd no-reflog &&
+               git tag -d TAGB1 TAGB2 &&
+               git update-ref refs/heads/B B~~ &&
+               git gc --prune=now &&
+               cd ../shallow9 &&
+               git fetch origin &&
+               git fsck --no-dangling
+       )
+'
+
 test_expect_success 'setup tests for the --stdin parameter' '
        for head in C D E F
        do
index bfa6279cc418278079bd95854adfe8d8301b6788..127e59a6037a14ad63648a727e873fe4a9e38381 100644 (file)
@@ -592,7 +592,7 @@ static void receive_needs(void)
                                die("invalid shallow line: %s", line);
                        object = parse_object(sha1);
                        if (!object)
-                               die("did not find object for %s", line);
+                               continue;
                        if (object->type != OBJ_COMMIT)
                                die("invalid shallow object %s", sha1_to_hex(sha1));
                        if (!(object->flags & CLIENT_SHALLOW)) {