From b99b6bcc57faf5c989fc18c3b8d4d92df3407cec Mon Sep 17 00:00:00 2001 From: Jeff King Date: Sun, 23 Feb 2020 23:36:56 -0500 Subject: packed_object_info(): use object_id for returning delta base If a caller sets the object_info.delta_base_sha1 to a non-NULL pointer, we'll write the oid of the object's delta base to it. But we can increase our type safety by switching this to a real object_id struct. All of our callers are just pointing into the hash member of an object_id anyway, so there's no inconvenience. Note that we do still keep it as a pointer-to-struct, because the NULL sentinel value tells us whether the caller is even interested in the information. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano diff --git a/builtin/cat-file.c b/builtin/cat-file.c index d6a1aa7..272f9fc 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -262,7 +262,7 @@ static void expand_atom(struct strbuf *sb, const char *atom, int len, strbuf_addstr(sb, data->rest); } else if (is_atom("deltabase", atom, len)) { if (data->mark_query) - data->info.delta_base_sha1 = data->delta_base_oid.hash; + data->info.delta_base_oid = &data->delta_base_oid; else strbuf_addstr(sb, oid_to_hex(&data->delta_base_oid)); diff --git a/object-store.h b/object-store.h index 5b04763..be72fee 100644 --- a/object-store.h +++ b/object-store.h @@ -300,7 +300,7 @@ struct object_info { enum object_type *typep; unsigned long *sizep; off_t *disk_sizep; - unsigned char *delta_base_sha1; + struct object_id *delta_base_oid; struct strbuf *type_name; void **contentp; diff --git a/packfile.c b/packfile.c index 947c3f8..ec7349b 100644 --- a/packfile.c +++ b/packfile.c @@ -1556,7 +1556,7 @@ int packed_object_info(struct repository *r, struct packed_git *p, } } - if (oi->delta_base_sha1) { + if (oi->delta_base_oid) { if (type == OBJ_OFS_DELTA || type == OBJ_REF_DELTA) { const unsigned char *base; @@ -1567,9 +1567,9 @@ int packed_object_info(struct repository *r, struct packed_git *p, goto out; } - hashcpy(oi->delta_base_sha1, base); + hashcpy(oi->delta_base_oid->hash, base); } else - hashclr(oi->delta_base_sha1); + oidclr(oi->delta_base_oid); } oi->whence = in_delta_base_cache(p, obj_offset) ? OI_DBCACHED : diff --git a/ref-filter.c b/ref-filter.c index 6867e33..79bb520 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -279,9 +279,9 @@ static int deltabase_atom_parser(const struct ref_format *format, struct used_at if (arg) return strbuf_addf_ret(err, -1, _("%%(deltabase) does not take arguments")); if (*atom->name == '*') - oi_deref.info.delta_base_sha1 = oi_deref.delta_base_oid.hash; + oi_deref.info.delta_base_oid = &oi_deref.delta_base_oid; else - oi.info.delta_base_sha1 = oi.delta_base_oid.hash; + oi.info.delta_base_oid = &oi.delta_base_oid; return 0; } diff --git a/sha1-file.c b/sha1-file.c index d785de8..6168867 100644 --- a/sha1-file.c +++ b/sha1-file.c @@ -1354,8 +1354,8 @@ static int loose_object_info(struct repository *r, struct strbuf hdrbuf = STRBUF_INIT; unsigned long size_scratch; - if (oi->delta_base_sha1) - hashclr(oi->delta_base_sha1); + if (oi->delta_base_oid) + oidclr(oi->delta_base_oid); /* * If we don't care about type or size, then we don't @@ -1474,8 +1474,8 @@ static int do_oid_object_info_extended(struct repository *r, *(oi->sizep) = co->size; if (oi->disk_sizep) *(oi->disk_sizep) = 0; - if (oi->delta_base_sha1) - hashclr(oi->delta_base_sha1); + if (oi->delta_base_oid) + oidclr(oi->delta_base_oid); if (oi->type_name) strbuf_addstr(oi->type_name, type_name(co->type)); if (oi->contentp) -- cgit v0.10.2-6-g49f6