]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: drop infrastructure to peel via iterators
authorPatrick Steinhardt <ps@pks.im>
Thu, 23 Oct 2025 07:16:19 +0000 (09:16 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 4 Nov 2025 15:32:25 +0000 (07:32 -0800)
Now that the peeled object ID gets propagated via the `struct reference`
there is no need anymore to call into the reference iterator itself to
dereference an object. Remove this infrastructure.

Most of the changes are straight-forward deletions of code. There is one
exception though in `refs/packed-backend.c::write_with_updates()`. Here
we stop peeling the iterator and instead just pass the peeled object ID
of that iterator directly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.h
refs/debug.c
refs/files-backend.c
refs/iterator.c
refs/packed-backend.c
refs/ref-cache.c
refs/refs-internal.h
refs/reftable-backend.c

diff --git a/refs.h b/refs.h
index 886ed2c0f43b048765d22a67f4a6509080d74018..2dd7ac1a16aee9b72b83c4f9eb322dd725de4b11 100644 (file)
--- a/refs.h
+++ b/refs.h
@@ -1289,10 +1289,6 @@ int repo_migrate_ref_storage_format(struct repository *repo,
  * to the next entry, ref_iterator_advance() aborts the iteration,
  * frees the ref_iterator, and returns ITER_ERROR.
  *
- * The reference currently being looked at can be peeled by calling
- * ref_iterator_peel(). This function is often faster than peel_ref(),
- * so it should be preferred when iterating over references.
- *
  * Putting it all together, a typical iteration looks like this:
  *
  *     int ok;
@@ -1307,9 +1303,6 @@ int repo_migrate_ref_storage_format(struct repository *repo,
  *             // Access information about the current reference:
  *             if (!(iter->flags & REF_ISSYMREF))
  *                     printf("%s is %s\n", iter->refname, oid_to_hex(iter->oid));
- *
- *             // If you need to peel the reference:
- *             ref_iterator_peel(iter, &oid);
  *     }
  *
  *     if (ok != ITER_DONE)
@@ -1400,13 +1393,6 @@ enum ref_iterator_seek_flag {
 int ref_iterator_seek(struct ref_iterator *ref_iterator, const char *refname,
                      unsigned int flags);
 
-/*
- * If possible, peel the reference currently being viewed by the
- * iterator. Return 0 on success.
- */
-int ref_iterator_peel(struct ref_iterator *ref_iterator,
-                     struct object_id *peeled);
-
 /* Free the reference iterator and any associated resources. */
 void ref_iterator_free(struct ref_iterator *ref_iterator);
 
index 67718bd1f49f1f07900ca801e44a46876bc10365..01499b9033ca3ce47250fcd311bbabbea912a72a 100644 (file)
@@ -177,16 +177,6 @@ static int debug_ref_iterator_seek(struct ref_iterator *ref_iterator,
        return res;
 }
 
-static int debug_ref_iterator_peel(struct ref_iterator *ref_iterator,
-                                  struct object_id *peeled)
-{
-       struct debug_ref_iterator *diter =
-               (struct debug_ref_iterator *)ref_iterator;
-       int res = diter->iter->vtable->peel(diter->iter, peeled);
-       trace_printf_key(&trace_refs, "iterator_peel: %s: %d\n", diter->iter->ref.name, res);
-       return res;
-}
-
 static void debug_ref_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct debug_ref_iterator *diter =
@@ -198,7 +188,6 @@ static void debug_ref_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable debug_ref_iterator_vtable = {
        .advance = debug_ref_iterator_advance,
        .seek = debug_ref_iterator_seek,
-       .peel = debug_ref_iterator_peel,
        .release = debug_ref_iterator_release,
 };
 
index fac53fa052dd22c9df0c145a2e13bfce4266e8ce..5aeb454fb47684d890db1579cb3cc0089c09d8e4 100644 (file)
@@ -993,15 +993,6 @@ static int files_ref_iterator_seek(struct ref_iterator *ref_iterator,
        return ref_iterator_seek(iter->iter0, refname, flags);
 }
 
-static int files_ref_iterator_peel(struct ref_iterator *ref_iterator,
-                                  struct object_id *peeled)
-{
-       struct files_ref_iterator *iter =
-               (struct files_ref_iterator *)ref_iterator;
-
-       return ref_iterator_peel(iter->iter0, peeled);
-}
-
 static void files_ref_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct files_ref_iterator *iter =
@@ -1012,7 +1003,6 @@ static void files_ref_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable files_ref_iterator_vtable = {
        .advance = files_ref_iterator_advance,
        .seek = files_ref_iterator_seek,
-       .peel = files_ref_iterator_peel,
        .release = files_ref_iterator_release,
 };
 
@@ -2388,12 +2378,6 @@ static int files_reflog_iterator_seek(struct ref_iterator *ref_iterator UNUSED,
        BUG("ref_iterator_seek() called for reflog_iterator");
 }
 
-static int files_reflog_iterator_peel(struct ref_iterator *ref_iterator UNUSED,
-                                     struct object_id *peeled UNUSED)
-{
-       BUG("ref_iterator_peel() called for reflog_iterator");
-}
-
 static void files_reflog_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct files_reflog_iterator *iter =
@@ -2404,7 +2388,6 @@ static void files_reflog_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable files_reflog_iterator_vtable = {
        .advance = files_reflog_iterator_advance,
        .seek = files_reflog_iterator_seek,
-       .peel = files_reflog_iterator_peel,
        .release = files_reflog_iterator_release,
 };
 
index 072c6aacdb0341d3af0bb28c8a5fe5d208a23deb..d79aa5ec82dc6fa0e129247533056e81d10d8b35 100644 (file)
@@ -21,12 +21,6 @@ int ref_iterator_seek(struct ref_iterator *ref_iterator, const char *refname,
        return ref_iterator->vtable->seek(ref_iterator, refname, flags);
 }
 
-int ref_iterator_peel(struct ref_iterator *ref_iterator,
-                     struct object_id *peeled)
-{
-       return ref_iterator->vtable->peel(ref_iterator, peeled);
-}
-
 void ref_iterator_free(struct ref_iterator *ref_iterator)
 {
        if (ref_iterator) {
@@ -60,12 +54,6 @@ static int empty_ref_iterator_seek(struct ref_iterator *ref_iterator UNUSED,
        return 0;
 }
 
-static int empty_ref_iterator_peel(struct ref_iterator *ref_iterator UNUSED,
-                                  struct object_id *peeled UNUSED)
-{
-       BUG("peel called for empty iterator");
-}
-
 static void empty_ref_iterator_release(struct ref_iterator *ref_iterator UNUSED)
 {
 }
@@ -73,7 +61,6 @@ static void empty_ref_iterator_release(struct ref_iterator *ref_iterator UNUSED)
 static struct ref_iterator_vtable empty_ref_iterator_vtable = {
        .advance = empty_ref_iterator_advance,
        .seek = empty_ref_iterator_seek,
-       .peel = empty_ref_iterator_peel,
        .release = empty_ref_iterator_release,
 };
 
@@ -240,18 +227,6 @@ static int merge_ref_iterator_seek(struct ref_iterator *ref_iterator,
        return 0;
 }
 
-static int merge_ref_iterator_peel(struct ref_iterator *ref_iterator,
-                                  struct object_id *peeled)
-{
-       struct merge_ref_iterator *iter =
-               (struct merge_ref_iterator *)ref_iterator;
-
-       if (!iter->current) {
-               BUG("peel called before advance for merge iterator");
-       }
-       return ref_iterator_peel(*iter->current, peeled);
-}
-
 static void merge_ref_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct merge_ref_iterator *iter =
@@ -263,7 +238,6 @@ static void merge_ref_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable merge_ref_iterator_vtable = {
        .advance = merge_ref_iterator_advance,
        .seek = merge_ref_iterator_seek,
-       .peel = merge_ref_iterator_peel,
        .release = merge_ref_iterator_release,
 };
 
@@ -412,15 +386,6 @@ static int prefix_ref_iterator_seek(struct ref_iterator *ref_iterator,
        return ref_iterator_seek(iter->iter0, refname, flags);
 }
 
-static int prefix_ref_iterator_peel(struct ref_iterator *ref_iterator,
-                                   struct object_id *peeled)
-{
-       struct prefix_ref_iterator *iter =
-               (struct prefix_ref_iterator *)ref_iterator;
-
-       return ref_iterator_peel(iter->iter0, peeled);
-}
-
 static void prefix_ref_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct prefix_ref_iterator *iter =
@@ -432,7 +397,6 @@ static void prefix_ref_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable prefix_ref_iterator_vtable = {
        .advance = prefix_ref_iterator_advance,
        .seek = prefix_ref_iterator_seek,
-       .peel = prefix_ref_iterator_peel,
        .release = prefix_ref_iterator_release,
 };
 
index 1fefefd54ed0e72cde699ddaad7e16bbb6a74787..6fa229edd0ffad6b9777f65e1512a36d27a0e2c1 100644 (file)
@@ -1030,22 +1030,6 @@ static int packed_ref_iterator_seek(struct ref_iterator *ref_iterator,
        return 0;
 }
 
-static int packed_ref_iterator_peel(struct ref_iterator *ref_iterator,
-                                  struct object_id *peeled)
-{
-       struct packed_ref_iterator *iter =
-               (struct packed_ref_iterator *)ref_iterator;
-
-       if ((iter->base.ref.flags & REF_KNOWS_PEELED)) {
-               oidcpy(peeled, &iter->peeled);
-               return is_null_oid(&iter->peeled) ? -1 : 0;
-       } else if ((iter->base.ref.flags & (REF_ISBROKEN | REF_ISSYMREF))) {
-               return -1;
-       } else {
-               return peel_object(iter->repo, &iter->oid, peeled) ? -1 : 0;
-       }
-}
-
 static void packed_ref_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct packed_ref_iterator *iter =
@@ -1059,7 +1043,6 @@ static void packed_ref_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable packed_ref_iterator_vtable = {
        .advance = packed_ref_iterator_advance,
        .seek = packed_ref_iterator_seek,
-       .peel = packed_ref_iterator_peel,
        .release = packed_ref_iterator_release,
 };
 
@@ -1525,13 +1508,8 @@ static enum ref_transaction_error write_with_updates(struct packed_ref_store *re
 
                if (cmp < 0) {
                        /* Pass the old reference through. */
-
-                       struct object_id peeled;
-                       int peel_error = ref_iterator_peel(iter, &peeled);
-
                        if (write_packed_entry(out, iter->ref.name,
-                                              iter->ref.oid,
-                                              peel_error ? NULL : &peeled))
+                                              iter->ref.oid, iter->ref.peeled_oid))
                                goto write_error;
 
                        if ((ok = ref_iterator_advance(iter)) != ITER_OK) {
index e427848879d61b2f094a494167e4bfd03fb70592..ffef01a597579e8eae0258d3a828a9930eecc7fc 100644 (file)
@@ -546,14 +546,6 @@ static int cache_ref_iterator_seek(struct ref_iterator *ref_iterator,
        return 0;
 }
 
-static int cache_ref_iterator_peel(struct ref_iterator *ref_iterator,
-                                  struct object_id *peeled)
-{
-       struct cache_ref_iterator *iter =
-               (struct cache_ref_iterator *)ref_iterator;
-       return peel_object(iter->repo, ref_iterator->ref.oid, peeled) ? -1 : 0;
-}
-
 static void cache_ref_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct cache_ref_iterator *iter =
@@ -565,7 +557,6 @@ static void cache_ref_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable cache_ref_iterator_vtable = {
        .advance = cache_ref_iterator_advance,
        .seek = cache_ref_iterator_seek,
-       .peel = cache_ref_iterator_peel,
        .release = cache_ref_iterator_release,
 };
 
index f4f845bbeaf673bb144f74b6d24fff41aeb802b2..4671517dade968fa673c04235c0e1d87552c368e 100644 (file)
@@ -357,12 +357,6 @@ typedef int ref_iterator_advance_fn(struct ref_iterator *ref_iterator);
 typedef int ref_iterator_seek_fn(struct ref_iterator *ref_iterator,
                                 const char *refname, unsigned int flags);
 
-/*
- * Peels the current ref, returning 0 for success or -1 for failure.
- */
-typedef int ref_iterator_peel_fn(struct ref_iterator *ref_iterator,
-                                struct object_id *peeled);
-
 /*
  * Implementations of this function should free any resources specific
  * to the derived class.
@@ -372,7 +366,6 @@ typedef void ref_iterator_release_fn(struct ref_iterator *ref_iterator);
 struct ref_iterator_vtable {
        ref_iterator_advance_fn *advance;
        ref_iterator_seek_fn *seek;
-       ref_iterator_peel_fn *peel;
        ref_iterator_release_fn *release;
 };
 
index e214e120d77a5c1e1c1d0788859591bdca1ab784..e329d4a423abdb2ae49b47c57ad38cca5a52aa96 100644 (file)
@@ -744,21 +744,6 @@ static int reftable_ref_iterator_seek(struct ref_iterator *ref_iterator,
        return iter->err;
 }
 
-static int reftable_ref_iterator_peel(struct ref_iterator *ref_iterator,
-                                     struct object_id *peeled)
-{
-       struct reftable_ref_iterator *iter =
-               (struct reftable_ref_iterator *)ref_iterator;
-
-       if (iter->ref.value_type == REFTABLE_REF_VAL2) {
-               oidread(peeled, iter->ref.value.val2.target_value,
-                       iter->refs->base.repo->hash_algo);
-               return 0;
-       }
-
-       return -1;
-}
-
 static void reftable_ref_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct reftable_ref_iterator *iter =
@@ -776,7 +761,6 @@ static void reftable_ref_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable reftable_ref_iterator_vtable = {
        .advance = reftable_ref_iterator_advance,
        .seek = reftable_ref_iterator_seek,
-       .peel = reftable_ref_iterator_peel,
        .release = reftable_ref_iterator_release,
 };
 
@@ -2098,13 +2082,6 @@ static int reftable_reflog_iterator_seek(struct ref_iterator *ref_iterator UNUSE
        return -1;
 }
 
-static int reftable_reflog_iterator_peel(struct ref_iterator *ref_iterator UNUSED,
-                                        struct object_id *peeled UNUSED)
-{
-       BUG("reftable reflog iterator cannot be peeled");
-       return -1;
-}
-
 static void reftable_reflog_iterator_release(struct ref_iterator *ref_iterator)
 {
        struct reftable_reflog_iterator *iter =
@@ -2117,7 +2094,6 @@ static void reftable_reflog_iterator_release(struct ref_iterator *ref_iterator)
 static struct ref_iterator_vtable reftable_reflog_iterator_vtable = {
        .advance = reftable_reflog_iterator_advance,
        .seek = reftable_reflog_iterator_seek,
-       .peel = reftable_reflog_iterator_peel,
        .release = reftable_reflog_iterator_release,
 };