refs: use peeled tag values in reference backends

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>

Karthik Nayak committed May 4, 2026 at 19:44 UTC 3ab3d5077dc7048f9a0209e06f7de30971a303d7
2 files changed +4 -11
refs/packed-backend.c
+2 -4
@@ -1531,13 +1531,11 @@ static enum ref_transaction_error write_with_updates(struct packed_ref_store *re
1531 */
1532 i++;
1533 } else {
1534 - struct object_id peeled;
1535 - int peel_error = peel_object(refs->base.repo, &update->new_oid,
1536 - &peeled, PEEL_OBJECT_VERIFY_TAGGED_OBJECT_TYPE);
1534 + bool peeled = update->flags & REF_HAVE_PEELED;
1535
1536 if (write_packed_entry(out, update->refname,
1537 &update->new_oid,
1540 - peel_error ? NULL : &peeled))
1538 + peeled ? &update->peeled : NULL))
1539 goto write_error;
1540
1541 i++;
refs/reftable-backend.c
+2 -7
@@ -12,7 +12,6 @@
12 #include "../hex.h"
13 #include "../ident.h"
14 #include "../iterator.h"
15 -#include "../object.h"
15 #include "../parse.h"
16 #include "../path.h"
17 #include "../refs.h"
@@ -1584,17 +1583,13 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data
1583 goto done;
1584 } else if (u->flags & REF_HAVE_NEW) {
1585 struct reftable_ref_record ref = {0};
1587 - struct object_id peeled;
1588 - int peel_error;
1586
1587 ref.refname = (char *)u->refname;
1588 ref.update_index = ts;
1589
1593 - peel_error = peel_object(arg->refs->base.repo, &u->new_oid, &peeled,
1594 - PEEL_OBJECT_VERIFY_TAGGED_OBJECT_TYPE);
1595 - if (!peel_error) {
1590 + if (u->flags & REF_HAVE_PEELED) {
1591 ref.value_type = REFTABLE_REF_VAL2;
1597 - memcpy(ref.value.val2.target_value, peeled.hash, GIT_MAX_RAWSZ);
1592 + memcpy(ref.value.val2.target_value, u->peeled.hash, GIT_MAX_RAWSZ);
1593 memcpy(ref.value.val2.value, u->new_oid.hash, GIT_MAX_RAWSZ);
1594 } else if (!is_null_oid(&u->new_oid)) {
1595 ref.value_type = REFTABLE_REF_VAL1;