Since read_object() is these days just a thin wrapper around oid_object_info_extended(), and since it only has two callers, let's just inline those calls. This has a few positive outcomes: - it's a net reduction in source code lines - even though the callers end up with a few extra lines, they're now more flexible and can use object_info flags directly. So no more need to convert die_if_corrupt between parameter/flag, and we can ask for lookup replacement with a flag rather than doing it ourselves. - there's one fewer function in an already crowded namespace (e.g., the difference between read_object() and read_object_file() was not immediately obvious; now we only have one of them). Signed-off-by: Jeff King <peff@xxxxxxxx> --- object-file.c | 45 +++++++++++++++++---------------------------- object-store.h | 2 +- 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/object-file.c b/object-file.c index 80a0cd3b35..ed1babbac2 100644 --- a/object-file.c +++ b/object-file.c @@ -1671,23 +1671,6 @@ int oid_object_info(struct repository *r, return type; } -static void *read_object(struct repository *r, - const struct object_id *oid, enum object_type *type, - unsigned long *size, - int die_if_corrupt) -{ - struct object_info oi = OBJECT_INFO_INIT; - void *content; - oi.typep = type; - oi.sizep = size; - oi.contentp = &content; - - if (oid_object_info_extended(r, oid, &oi, die_if_corrupt - ? OBJECT_INFO_DIE_IF_CORRUPT : 0) < 0) - return NULL; - return content; -} - int pretend_object_file(void *buf, unsigned long len, enum object_type type, struct object_id *oid) { @@ -1709,25 +1692,28 @@ int pretend_object_file(void *buf, unsigned long len, enum object_type type, /* * This function dies on corrupt objects; the callers who want to - * deal with them should arrange to call read_object() and give error - * messages themselves. + * deal with them should arrange to call oid_object_info_extended() and give + * error messages themselves. */ void *read_object_file_extended(struct repository *r, const struct object_id *oid, enum object_type *type, unsigned long *size, int lookup_replace) { + struct object_info oi = OBJECT_INFO_INIT; + unsigned flags = OBJECT_INFO_DIE_IF_CORRUPT; void *data; - const struct object_id *repl = lookup_replace ? - lookup_replace_object(r, oid) : oid; - errno = 0; - data = read_object(r, repl, type, size, 1); - if (data) - return data; + oi.typep = type; + oi.sizep = size; + oi.contentp = &data; + if (lookup_replace) + flags |= OBJECT_INFO_LOOKUP_REPLACE; + if (oid_object_info_extended(r, oid, &oi, flags)) + return NULL; - return NULL; + return data; } void *read_object_with_reference(struct repository *r, @@ -2255,15 +2241,18 @@ int force_object_loose(const struct object_id *oid, time_t mtime) { void *buf; unsigned long len; + struct object_info oi = OBJECT_INFO_INIT; enum object_type type; char hdr[MAX_HEADER_LEN]; int hdrlen; int ret; if (has_loose_object(oid)) return 0; - buf = read_object(the_repository, oid, &type, &len, 0); - if (!buf) + oi.typep = &type; + oi.sizep = &len; + oi.contentp = &buf; + if (oid_object_info_extended(the_repository, oid, &oi, 0)) return error(_("cannot read object for %s"), oid_to_hex(oid)); hdrlen = format_object_header(hdr, sizeof(hdr), type, len); ret = write_loose_object(oid, hdr, hdrlen, buf, len, mtime, 0); diff --git a/object-store.h b/object-store.h index 98c1d67946..f0aa03bbb9 100644 --- a/object-store.h +++ b/object-store.h @@ -358,7 +358,7 @@ void assert_oid_type(const struct object_id *oid, enum object_type expect); /* * Enabling the object read lock allows multiple threads to safely call the * following functions in parallel: repo_read_object_file(), read_object_file(), - * read_object_file_extended(), read_object_with_reference(), read_object(), + * read_object_file_extended(), read_object_with_reference(), * oid_object_info() and oid_object_info_extended(). * * obj_read_lock() and obj_read_unlock() may also be used to protect other -- 2.39.0.469.g9000b9c396