Merge branch 'bc/object-id'
Conversion from uchar[20] to struct object_id continues. * bc/object-id: (53 commits) object: convert parse_object* to take struct object_id tree: convert parse_tree_indirect to struct object_id sequencer: convert do_recursive_merge to struct object_id diff-lib: convert do_diff_cache to struct object_id builtin/ls-tree: convert to struct object_id merge: convert checkout_fast_forward to struct object_id sequencer: convert fast_forward_to to struct object_id builtin/ls-files: convert overlay_tree_on_cache to object_id builtin/read-tree: convert to struct object_id sha1_name: convert internals of peel_onion to object_id upload-pack: convert remaining parse_object callers to object_id revision: convert remaining parse_object callers to object_id revision: rename add_pending_sha1 to add_pending_oid http-push: convert process_ls_object and descendants to object_id refs/files-backend: convert many internals to struct object_id refs: convert struct ref_update to use struct object_id ref-filter: convert some static functions to struct object_id Convert struct ref_array_item to struct object_id Convert the verify_pack callback to struct object_id Convert lookup_tag to struct object_id ...
This commit is contained in:
@ -106,12 +106,14 @@ static void *get_delta(struct object_entry *entry)
|
||||
void *buf, *base_buf, *delta_buf;
|
||||
enum object_type type;
|
||||
|
||||
buf = read_sha1_file(entry->idx.sha1, &type, &size);
|
||||
buf = read_sha1_file(entry->idx.oid.hash, &type, &size);
|
||||
if (!buf)
|
||||
die("unable to read %s", sha1_to_hex(entry->idx.sha1));
|
||||
base_buf = read_sha1_file(entry->delta->idx.sha1, &type, &base_size);
|
||||
die("unable to read %s", oid_to_hex(&entry->idx.oid));
|
||||
base_buf = read_sha1_file(entry->delta->idx.oid.hash, &type,
|
||||
&base_size);
|
||||
if (!base_buf)
|
||||
die("unable to read %s", sha1_to_hex(entry->delta->idx.sha1));
|
||||
die("unable to read %s",
|
||||
oid_to_hex(&entry->delta->idx.oid));
|
||||
delta_buf = diff_delta(base_buf, base_size,
|
||||
buf, size, &delta_size, 0);
|
||||
if (!delta_buf || delta_size != entry->delta_size)
|
||||
@ -249,12 +251,14 @@ static unsigned long write_no_reuse_object(struct sha1file *f, struct object_ent
|
||||
if (!usable_delta) {
|
||||
if (entry->type == OBJ_BLOB &&
|
||||
entry->size > big_file_threshold &&
|
||||
(st = open_istream(entry->idx.sha1, &type, &size, NULL)) != NULL)
|
||||
(st = open_istream(entry->idx.oid.hash, &type, &size, NULL)) != NULL)
|
||||
buf = NULL;
|
||||
else {
|
||||
buf = read_sha1_file(entry->idx.sha1, &type, &size);
|
||||
buf = read_sha1_file(entry->idx.oid.hash, &type,
|
||||
&size);
|
||||
if (!buf)
|
||||
die(_("unable to read %s"), sha1_to_hex(entry->idx.sha1));
|
||||
die(_("unable to read %s"),
|
||||
oid_to_hex(&entry->idx.oid));
|
||||
}
|
||||
/*
|
||||
* make sure no cached delta data remains from a
|
||||
@ -322,7 +326,7 @@ static unsigned long write_no_reuse_object(struct sha1file *f, struct object_ent
|
||||
return 0;
|
||||
}
|
||||
sha1write(f, header, hdrlen);
|
||||
sha1write(f, entry->delta->idx.sha1, 20);
|
||||
sha1write(f, entry->delta->idx.oid.hash, 20);
|
||||
hdrlen += 20;
|
||||
} else {
|
||||
if (limit && hdrlen + datalen + 20 >= limit) {
|
||||
@ -334,7 +338,7 @@ static unsigned long write_no_reuse_object(struct sha1file *f, struct object_ent
|
||||
sha1write(f, header, hdrlen);
|
||||
}
|
||||
if (st) {
|
||||
datalen = write_large_blob_data(st, f, entry->idx.sha1);
|
||||
datalen = write_large_blob_data(st, f, entry->idx.oid.hash);
|
||||
close_istream(st);
|
||||
} else {
|
||||
sha1write(f, buf, datalen);
|
||||
@ -369,7 +373,8 @@ static off_t write_reuse_object(struct sha1file *f, struct object_entry *entry,
|
||||
datalen = revidx[1].offset - offset;
|
||||
if (!pack_to_stdout && p->index_version > 1 &&
|
||||
check_pack_crc(p, &w_curs, offset, datalen, revidx->nr)) {
|
||||
error("bad packed object CRC for %s", sha1_to_hex(entry->idx.sha1));
|
||||
error("bad packed object CRC for %s",
|
||||
oid_to_hex(&entry->idx.oid));
|
||||
unuse_pack(&w_curs);
|
||||
return write_no_reuse_object(f, entry, limit, usable_delta);
|
||||
}
|
||||
@ -379,7 +384,8 @@ static off_t write_reuse_object(struct sha1file *f, struct object_entry *entry,
|
||||
|
||||
if (!pack_to_stdout && p->index_version == 1 &&
|
||||
check_pack_inflate(p, &w_curs, offset, datalen, entry->size)) {
|
||||
error("corrupt packed object for %s", sha1_to_hex(entry->idx.sha1));
|
||||
error("corrupt packed object for %s",
|
||||
oid_to_hex(&entry->idx.oid));
|
||||
unuse_pack(&w_curs);
|
||||
return write_no_reuse_object(f, entry, limit, usable_delta);
|
||||
}
|
||||
@ -404,7 +410,7 @@ static off_t write_reuse_object(struct sha1file *f, struct object_entry *entry,
|
||||
return 0;
|
||||
}
|
||||
sha1write(f, header, hdrlen);
|
||||
sha1write(f, entry->delta->idx.sha1, 20);
|
||||
sha1write(f, entry->delta->idx.oid.hash, 20);
|
||||
hdrlen += 20;
|
||||
reused_delta++;
|
||||
} else {
|
||||
@ -509,7 +515,7 @@ static enum write_one_status write_one(struct sha1file *f,
|
||||
recursing = (e->idx.offset == 1);
|
||||
if (recursing) {
|
||||
warning("recursive delta detected for object %s",
|
||||
sha1_to_hex(e->idx.sha1));
|
||||
oid_to_hex(&e->idx.oid));
|
||||
return WRITE_ONE_RECURSIVE;
|
||||
} else if (e->idx.offset || e->preferred_base) {
|
||||
/* offset is non zero if object is written already. */
|
||||
@ -1432,7 +1438,7 @@ static void check_object(struct object_entry *entry)
|
||||
ofs += 1;
|
||||
if (!ofs || MSB(ofs, 7)) {
|
||||
error("delta base offset overflow in pack for %s",
|
||||
sha1_to_hex(entry->idx.sha1));
|
||||
oid_to_hex(&entry->idx.oid));
|
||||
goto give_up;
|
||||
}
|
||||
c = buf[used_0++];
|
||||
@ -1441,7 +1447,7 @@ static void check_object(struct object_entry *entry)
|
||||
ofs = entry->in_pack_offset - ofs;
|
||||
if (ofs <= 0 || ofs >= entry->in_pack_offset) {
|
||||
error("delta base offset out of bound for %s",
|
||||
sha1_to_hex(entry->idx.sha1));
|
||||
oid_to_hex(&entry->idx.oid));
|
||||
goto give_up;
|
||||
}
|
||||
if (reuse_delta && !entry->preferred_base) {
|
||||
@ -1498,7 +1504,7 @@ static void check_object(struct object_entry *entry)
|
||||
unuse_pack(&w_curs);
|
||||
}
|
||||
|
||||
entry->type = sha1_object_info(entry->idx.sha1, &entry->size);
|
||||
entry->type = sha1_object_info(entry->idx.oid.hash, &entry->size);
|
||||
/*
|
||||
* The error condition is checked in prepare_pack(). This is
|
||||
* to permit a missing preferred base object to be ignored
|
||||
@ -1514,7 +1520,7 @@ static int pack_offset_sort(const void *_a, const void *_b)
|
||||
|
||||
/* avoid filesystem trashing with loose objects */
|
||||
if (!a->in_pack && !b->in_pack)
|
||||
return hashcmp(a->idx.sha1, b->idx.sha1);
|
||||
return oidcmp(&a->idx.oid, &b->idx.oid);
|
||||
|
||||
if (a->in_pack < b->in_pack)
|
||||
return -1;
|
||||
@ -1560,7 +1566,8 @@ static void drop_reused_delta(struct object_entry *entry)
|
||||
* And if that fails, the error will be recorded in entry->type
|
||||
* and dealt with in prepare_pack().
|
||||
*/
|
||||
entry->type = sha1_object_info(entry->idx.sha1, &entry->size);
|
||||
entry->type = sha1_object_info(entry->idx.oid.hash,
|
||||
&entry->size);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1852,26 +1859,29 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
|
||||
/* Load data if not already done */
|
||||
if (!trg->data) {
|
||||
read_lock();
|
||||
trg->data = read_sha1_file(trg_entry->idx.sha1, &type, &sz);
|
||||
trg->data = read_sha1_file(trg_entry->idx.oid.hash, &type,
|
||||
&sz);
|
||||
read_unlock();
|
||||
if (!trg->data)
|
||||
die("object %s cannot be read",
|
||||
sha1_to_hex(trg_entry->idx.sha1));
|
||||
oid_to_hex(&trg_entry->idx.oid));
|
||||
if (sz != trg_size)
|
||||
die("object %s inconsistent object length (%lu vs %lu)",
|
||||
sha1_to_hex(trg_entry->idx.sha1), sz, trg_size);
|
||||
oid_to_hex(&trg_entry->idx.oid), sz,
|
||||
trg_size);
|
||||
*mem_usage += sz;
|
||||
}
|
||||
if (!src->data) {
|
||||
read_lock();
|
||||
src->data = read_sha1_file(src_entry->idx.sha1, &type, &sz);
|
||||
src->data = read_sha1_file(src_entry->idx.oid.hash, &type,
|
||||
&sz);
|
||||
read_unlock();
|
||||
if (!src->data) {
|
||||
if (src_entry->preferred_base) {
|
||||
static int warned = 0;
|
||||
if (!warned++)
|
||||
warning("object %s cannot be read",
|
||||
sha1_to_hex(src_entry->idx.sha1));
|
||||
oid_to_hex(&src_entry->idx.oid));
|
||||
/*
|
||||
* Those objects are not included in the
|
||||
* resulting pack. Be resilient and ignore
|
||||
@ -1881,11 +1891,12 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
|
||||
return 0;
|
||||
}
|
||||
die("object %s cannot be read",
|
||||
sha1_to_hex(src_entry->idx.sha1));
|
||||
oid_to_hex(&src_entry->idx.oid));
|
||||
}
|
||||
if (sz != src_size)
|
||||
die("object %s inconsistent object length (%lu vs %lu)",
|
||||
sha1_to_hex(src_entry->idx.sha1), sz, src_size);
|
||||
oid_to_hex(&src_entry->idx.oid), sz,
|
||||
src_size);
|
||||
*mem_usage += sz;
|
||||
}
|
||||
if (!src->index) {
|
||||
@ -2337,7 +2348,7 @@ static void add_tag_chain(const struct object_id *oid)
|
||||
if (packlist_find(&to_pack, oid->hash, NULL))
|
||||
return;
|
||||
|
||||
tag = lookup_tag(oid->hash);
|
||||
tag = lookup_tag(oid);
|
||||
while (1) {
|
||||
if (!tag || parse_tag(tag) || !tag->tagged)
|
||||
die("unable to pack objects reachable from tag %s",
|
||||
@ -2406,7 +2417,7 @@ static void prepare_pack(int window, int depth)
|
||||
nr_deltas++;
|
||||
if (entry->type < 0)
|
||||
die("unable to get type of object %s",
|
||||
sha1_to_hex(entry->idx.sha1));
|
||||
oid_to_hex(&entry->idx.oid));
|
||||
} else {
|
||||
if (entry->type < 0) {
|
||||
/*
|
||||
@ -2777,10 +2788,10 @@ static void get_object_list(int ac, const char **av)
|
||||
continue;
|
||||
}
|
||||
if (starts_with(line, "--shallow ")) {
|
||||
unsigned char sha1[20];
|
||||
if (get_sha1_hex(line + 10, sha1))
|
||||
struct object_id oid;
|
||||
if (get_oid_hex(line + 10, &oid))
|
||||
die("not an SHA-1 '%s'", line + 10);
|
||||
register_shallow(sha1);
|
||||
register_shallow(&oid);
|
||||
use_bitmap_index = 0;
|
||||
continue;
|
||||
}
|
||||
|
Reference in New Issue
Block a user