summaryrefslogtreecommitdiff
path: root/upload-pack.c
diff options
context:
space:
mode:
authorMichael Heemskerk <mheemskerk@atlassian.com>2013-04-29 05:32:04 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-04-29 05:33:53 (GMT)
commitaf04fa2a78af3f4dc07bdc3e3018ccf3baa88c20 (patch)
treeef98b2a7d158888c7c6681bb49bbb723265cf0aa /upload-pack.c
parentb75cdfaa882a00f2274e74b21c1a9927d184ed29 (diff)
downloadgit-af04fa2a78af3f4dc07bdc3e3018ccf3baa88c20.zip
git-af04fa2a78af3f4dc07bdc3e3018ccf3baa88c20.tar.gz
git-af04fa2a78af3f4dc07bdc3e3018ccf3baa88c20.tar.bz2
upload-pack: ignore 'shallow' lines with unknown obj-ids
When the client sends a 'shallow' line for an object that the server does not have, the server currently dies with the error: "did not find object for shallow <obj-id>". The client may have truncated the history at the commit by fetching shallowly from a different server, or the commit may have been garbage collected by the server. In either case, this unknown commit is not relevant for calculating the pack that is to be sent and can be safely ignored, and it is not used when recomputing where the updated history of the client is cauterised. The documentation in technical/pack-protocol.txt has been updated to remove the restriction that "Clients MUST NOT mention an obj-id which it does not know exists on the server". This requirement is not realistic because clients cannot know whether an object has been garbage collected by the server. Signed-off-by: Michael Heemskerk <mheemskerk@atlassian.com> Reviewed-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'upload-pack.c')
-rw-r--r--upload-pack.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/upload-pack.c b/upload-pack.c
index bfa6279..127e59a 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -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)) {