aboutsummaryrefslogtreecommitdiffstats
path: root/refs/iterator.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2024-08-15 13:22:15 -0700
committerJunio C Hamano <gitster@pobox.com>2024-08-15 13:22:15 -0700
commite7f86cb69de9c3b95c8c8816b51621c1d7910e02 (patch)
tree5be466f67f045f9c1ab56411e7977ac5e66a4fe7 /refs/iterator.c
parent88457a6151ca7bd46ce1a809f9740340b712e242 (diff)
parenta30ce14a806b6b726ce87fc231a3536e8cc0b0fa (diff)
downloadgit-e7f86cb69de9c3b95c8c8816b51621c1d7910e02.tar.gz
Merge branch 'jc/refs-symref-referent'
The refs API has been taught to give symref target information to the users of ref iterators, allowing for-each-ref and friends to avoid an extra ref_resolve_* API call per a symbolic ref. * jc/refs-symref-referent: ref-filter: populate symref from iterator refs: add referent to each_ref_fn refs: keep track of unresolved reference value in iterators
Diffstat (limited to 'refs/iterator.c')
-rw-r--r--refs/iterator.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/refs/iterator.c b/refs/iterator.c
index d355ebf0d5..8e999d81fc 100644
--- a/refs/iterator.c
+++ b/refs/iterator.c
@@ -29,6 +29,7 @@ void base_ref_iterator_init(struct ref_iterator *iter,
{
iter->vtable = vtable;
iter->refname = NULL;
+ iter->referent = NULL;
iter->oid = NULL;
iter->flags = 0;
}
@@ -199,6 +200,7 @@ static int merge_ref_iterator_advance(struct ref_iterator *ref_iterator)
}
if (selection & ITER_YIELD_CURRENT) {
+ iter->base.referent = (*iter->current)->referent;
iter->base.refname = (*iter->current)->refname;
iter->base.oid = (*iter->current)->oid;
iter->base.flags = (*iter->current)->flags;
@@ -448,7 +450,7 @@ int do_for_each_ref_iterator(struct ref_iterator *iter,
current_ref_iter = iter;
while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
- retval = fn(iter->refname, iter->oid, iter->flags, cb_data);
+ retval = fn(iter->refname, iter->referent, iter->oid, iter->flags, cb_data);
if (retval) {
/*
* If ref_iterator_abort() returns ITER_ERROR,