object-file: inline calls to read_object()

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@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2023-01-07 08:48:55 -05:00 committed by Junio C Hamano
parent 4dbebc36b0
commit b25562e63f
2 changed files with 18 additions and 29 deletions

View File

@ -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,8 +1692,8 @@ 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,
@ -1718,16 +1701,19 @@ void *read_object_file_extended(struct repository *r,
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,6 +2241,7 @@ 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;
@ -2262,8 +2249,10 @@ int force_object_loose(const struct object_id *oid, time_t mtime)
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);

View File

@ -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