X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=upload-pack.c;h=7c05b15e68d6deed45a172df397e814fcf2032b0;hb=260adc87b3d6c00650ba2dd493abd9a6603ca4f1;hp=6142421ea1172f7fe6b57486a4f41b81d92bab85;hpb=7025616048e2cdf61b7f5c6e4fba8045020fb537;p=git.git diff --git a/upload-pack.c b/upload-pack.c index 6142421ea..7c05b15e6 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -603,6 +603,8 @@ static void receive_needs(void) object = parse_object(sha1); if (!object) die("did not find object for %s", line); + if (object->type != OBJ_COMMIT) + die("invalid shallow object %s", sha1_to_hex(sha1)); object->flags |= CLIENT_SHALLOW; add_object_array(object, NULL, &shallows); continue; @@ -670,10 +672,17 @@ static void receive_needs(void) if (depth == 0 && shallows.nr == 0) return; if (depth > 0) { - struct commit_list *result, *backup; + struct commit_list *result = NULL, *backup = NULL; int i; - backup = result = get_shallow_commits(&want_obj, depth, - SHALLOW, NOT_SHALLOW); + if (depth == INFINITE_DEPTH) + for (i = 0; i < shallows.nr; i++) { + struct object *object = shallows.objects[i].item; + object->flags |= NOT_SHALLOW; + } + else + backup = result = + get_shallow_commits(&want_obj, depth, + SHALLOW, NOT_SHALLOW); while (result) { struct object *object = &result->item->object; if (!(object->flags & (CLIENT_SHALLOW|NOT_SHALLOW))) {