From cca7081a93b192219e8f4f7252c7fc7c2cabfd9a Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Wed, 29 Jun 2005 09:38:02 -0700 Subject: [PATCH] Clean up git-unpack-objects a bit I'd like to add back the "dry-run" thing, but it turns out that to do it well, I'd have to keep all the object data in memory (which is not acceptable). So I'll clean it up a bit and make it do as many checks as it can. --- unpack-objects.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/unpack-objects.c b/unpack-objects.c index b9ddcb70e..0d15c0038 100644 --- a/unpack-objects.c +++ b/unpack-objects.c @@ -98,15 +98,22 @@ static void add_delta_to_list(unsigned char *base_sha1, void *delta, unsigned lo delta_list = info; } -static void added_object(unsigned char *sha1, char *type, void *data, unsigned long size); +static void added_object(unsigned char *sha1, const char *type, void *data, unsigned long size); -static int resolve_delta(char *type, +static void write_object(void *buf, unsigned long size, const char *type) +{ + unsigned char sha1[20]; + if (write_sha1_file(buf, size, type, sha1) < 0) + die("failed to write object"); + added_object(sha1, type, buf, size); +} + +static int resolve_delta(const char *type, void *base, unsigned long base_size, void *delta, unsigned long delta_size) { void *result; unsigned long result_size; - unsigned char sha1[20]; result = patch_delta(base, base_size, delta, delta_size, @@ -114,15 +121,12 @@ static int resolve_delta(char *type, if (!result) die("failed to apply delta"); free(delta); - - if (write_sha1_file(result, result_size, type, sha1) < 0) - die("failed to write object"); - added_object(sha1, type, result, result_size); + write_object(result, result_size, type); free(result); return 0; } -static void added_object(unsigned char *sha1, char *type, void *data, unsigned long size) +static void added_object(unsigned char *sha1, const char *type, void *data, unsigned long size) { struct delta_info **p = &delta_list; struct delta_info *info; @@ -142,8 +146,7 @@ static void added_object(unsigned char *sha1, char *type, void *data, unsigned l static int unpack_non_delta_entry(enum object_type kind, unsigned long size) { void *buf = get_data(size); - unsigned char sha1[20]; - char *type; + const char *type; switch (kind) { case OBJ_COMMIT: type = "commit"; break; @@ -152,9 +155,7 @@ static int unpack_non_delta_entry(enum object_type kind, unsigned long size) case OBJ_TAG: type = "tag"; break; default: die("bad type %d", kind); } - if (write_sha1_file(buf, size, type, sha1) < 0) - die("failed to write object"); - added_object(sha1, type, buf, size); + write_object(buf, size, type); free(buf); return 0; } -- 2.30.2