]> git.ipfire.org Git - thirdparty/git.git/commitdiff
packed_object_info(): use object_id for returning delta base
authorJeff King <peff@peff.net>
Mon, 24 Feb 2020 04:36:56 +0000 (23:36 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 24 Feb 2020 20:55:53 +0000 (12:55 -0800)
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>
builtin/cat-file.c
object-store.h
packfile.c
ref-filter.c
sha1-file.c

index d6a1aa74cd41fe17fdb9d92f6b55fb7d67b31726..272f9fc6d7cb540c89c3dca13969398afd3c1ee1 100644 (file)
@@ -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));
index 5b047637e3e02e9e8eda665095b3630ae20025e4..be72fee7d557758a9e0efbaa13efeb2b6fb84276 100644 (file)
@@ -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;
 
index 947c3f8e5d071f63e4dedc2a3eaaa91c67d2b731..ec7349bb865aa6d98cd4bafb61aa20662124a8ff 100644 (file)
@@ -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 :
index 6867e33648cb58d6836594a5cf145a58f81a884e..79bb52067832e971d39f06fa756dd09a205c65cc 100644 (file)
@@ -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;
 }
 
index d785de8a851bd6a9965a62cad15285b16fca0231..616886799e5906988ac4834d71cd259ee1e540a8 100644 (file)
@@ -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)