diff options
| author | Junio C Hamano <gitster@pobox.com> | 2024-08-15 13:22:15 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-08-15 13:22:15 -0700 |
| commit | e7f86cb69de9c3b95c8c8816b51621c1d7910e02 (patch) | |
| tree | 5be466f67f045f9c1ab56411e7977ac5e66a4fe7 /refs/reftable-backend.c | |
| parent | Merge branch 'ps/submodule-ref-format' (diff) | |
| parent | ref-filter: populate symref from iterator (diff) | |
| download | git-e7f86cb69de9c3b95c8c8816b51621c1d7910e02.tar.gz git-e7f86cb69de9c3b95c8c8816b51621c1d7910e02.zip | |
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/reftable-backend.c')
| -rw-r--r-- | refs/reftable-backend.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c index bf4446afd3..db2ae1dfcb 100644 --- a/refs/reftable-backend.c +++ b/refs/reftable-backend.c @@ -454,6 +454,7 @@ static int reftable_ref_iterator_advance(struct ref_iterator *ref_iterator) struct reftable_ref_iterator *iter = (struct reftable_ref_iterator *)ref_iterator; struct reftable_ref_store *refs = iter->refs; + const char *referent = NULL; while (!iter->err) { int flags = 0; @@ -493,8 +494,11 @@ static int reftable_ref_iterator_advance(struct ref_iterator *ref_iterator) refs->base.repo->hash_algo); break; case REFTABLE_REF_SYMREF: - if (!refs_resolve_ref_unsafe(&iter->refs->base, iter->ref.refname, - RESOLVE_REF_READING, &iter->oid, &flags)) + referent = refs_resolve_ref_unsafe(&iter->refs->base, + iter->ref.refname, + RESOLVE_REF_READING, + &iter->oid, &flags); + if (!referent) oidclr(&iter->oid, refs->base.repo->hash_algo); break; default: @@ -522,6 +526,7 @@ static int reftable_ref_iterator_advance(struct ref_iterator *ref_iterator) continue; iter->base.refname = iter->ref.refname; + iter->base.referent = referent; iter->base.oid = &iter->oid; iter->base.flags = flags; |
