summaryrefslogtreecommitdiff
path: root/unpack-objects.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-29 16:38:02 (GMT)
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-29 16:38:02 (GMT)
commitcca7081a93b192219e8f4f7252c7fc7c2cabfd9a (patch)
treecacb8cc1771e23a0e0c0d95e3d8c1fa1e8d0b1bd /unpack-objects.c
parentf9253394a271a9fefdd234a86c228adeb6d0136a (diff)
downloadgit-cca7081a93b192219e8f4f7252c7fc7c2cabfd9a.zip
git-cca7081a93b192219e8f4f7252c7fc7c2cabfd9a.tar.gz
git-cca7081a93b192219e8f4f7252c7fc7c2cabfd9a.tar.bz2
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.
Diffstat (limited to 'unpack-objects.c')
-rw-r--r--unpack-objects.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/unpack-objects.c b/unpack-objects.c
index b9ddcb7..0d15c00 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;
}