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 <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
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 @@
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 @@
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 @@
}
}
- 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 @@
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 @@
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 @@
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 @@
*(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)