]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: use peeled tag values in reference backends
authorKarthik Nayak <karthik.188@gmail.com>
Mon, 27 Apr 2026 10:42:10 +0000 (12:42 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 27 Apr 2026 12:35:14 +0000 (21:35 +0900)
The reference backends peel tag objects when storing references to them.
This is to provide optimized reads which avoids hitting the odb. The
previous commits ensures that the peeled value is now propagated via the
generic layer. So modify the packed and reftable backend to directly use
this value instead of calling `peel_object()` independently.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs/packed-backend.c
refs/reftable-backend.c

index 35a0f32e1cc45e0039fd395c33fa6e3b5bd3d9b1..0acde48c4525132b17715cc735c64a3078c27e02 100644 (file)
@@ -1531,13 +1531,11 @@ static enum ref_transaction_error write_with_updates(struct packed_ref_store *re
                         */
                        i++;
                } else {
-                       struct object_id peeled;
-                       int peel_error = peel_object(refs->base.repo, &update->new_oid,
-                                                    &peeled, PEEL_OBJECT_VERIFY_TAGGED_OBJECT_TYPE);
+                       bool peeled = update->flags & REF_HAVE_PEELED;
 
                        if (write_packed_entry(out, update->refname,
                                               &update->new_oid,
-                                              peel_error ? NULL : &peeled))
+                                              peeled ? &update->peeled : NULL))
                                goto write_error;
 
                        i++;
index b0c010387d8d4e01e8f2b1cfb93bf01ae86d222a..8b4ac2e618055963be31551d089388af1fff09b7 100644 (file)
@@ -12,7 +12,6 @@
 #include "../hex.h"
 #include "../ident.h"
 #include "../iterator.h"
-#include "../object.h"
 #include "../parse.h"
 #include "../path.h"
 #include "../refs.h"
@@ -1584,17 +1583,13 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data
                                goto done;
                } else if (u->flags & REF_HAVE_NEW) {
                        struct reftable_ref_record ref = {0};
-                       struct object_id peeled;
-                       int peel_error;
 
                        ref.refname = (char *)u->refname;
                        ref.update_index = ts;
 
-                       peel_error = peel_object(arg->refs->base.repo, &u->new_oid, &peeled,
-                                                PEEL_OBJECT_VERIFY_TAGGED_OBJECT_TYPE);
-                       if (!peel_error) {
+                       if (u->flags & REF_HAVE_PEELED) {
                                ref.value_type = REFTABLE_REF_VAL2;
-                               memcpy(ref.value.val2.target_value, peeled.hash, GIT_MAX_RAWSZ);
+                               memcpy(ref.value.val2.target_value, u->peeled.hash, GIT_MAX_RAWSZ);
                                memcpy(ref.value.val2.value, u->new_oid.hash, GIT_MAX_RAWSZ);
                        } else if (!is_null_oid(&u->new_oid)) {
                                ref.value_type = REFTABLE_REF_VAL1;