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,
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;
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;
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);
+ if (!dry_run)
+ write_object(buf, size, type);
free(buf);
return 0;
}
use(20);
delta_data = get_data(delta_size);
+ if (dry_run) {
+ free(delta_data);
+ return 0;
+ }
if (!has_sha1_file(base_sha1)) {
add_delta_to_list(base_sha1, delta_data, delta_size);
static void unpack_one(void)
{
+ unsigned shift;
unsigned char *pack, c;
unsigned long size;
enum object_type type;
use(1);
type = (c >> 4) & 7;
size = (c & 15);
+ shift = 4;
while (c & 0x80) {
pack = fill(1);
c = *pack++;
use(1);
- size = (size << 7) + (c & 0x7f);
+ size += (c & 0x7f) << shift;
+ shift += 7;
}
switch (type) {
case OBJ_COMMIT:
if (ntohl(hdr->hdr_signature) != PACK_SIGNATURE)
die("bad pack file");
- if (version != 1)
+ if (version != PACK_VERSION)
die("unable to handle pack file version %d", version);
fprintf(stderr, "Unpacking %d objects\n", nr_objects);