@@ -1549,18 +1549,24 @@ const char *find_descendant_ref(const char *dirname,
return NULL;
}
-int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
+int refs_single_ref(struct ref_store *refs, const char *refname,
+ each_ref_fn fn, void *cb_data)
{
struct object_id oid;
int flag;
- if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING,
+ if (refs_resolve_ref_unsafe(refs, refname, RESOLVE_REF_READING,
&oid, &flag))
- return fn("HEAD", &oid, flag, cb_data);
+ return fn(refname, &oid, flag, cb_data);
return 0;
}
+int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
+{
+ return refs_single_ref(refs, "HEAD", fn, cb_data);
+}
+
int head_ref(each_ref_fn fn, void *cb_data)
{
return refs_head_ref(get_main_ref_store(the_repository), fn, cb_data);
@@ -324,6 +324,8 @@ typedef int each_repo_ref_fn(struct repository *r,
* modifies the reference also returns a nonzero value to immediately
* stop the iteration. Returned references are sorted.
*/
+int refs_single_ref(struct ref_store *refs, const char *refname,
+ each_ref_fn fn, void *cb_data);
int refs_head_ref(struct ref_store *refs,
each_ref_fn fn, void *cb_data);
int refs_for_each_ref(struct ref_store *refs,
We currently provide the functionality to iterate over refs and call a specific callback. This functionality currently supports iterating over the entire "refs/*" space or directly the "HEAD" ref. This leaves operational refs "ORIG_HEAD", "REBASE_HEAD" and so forth behind. In the following commit, we introduce a mechanism to process all the operational refs outside the "refs/*" space. To do this, we require a function similar `refs_head_ref`, which can process a single specified reference. This commit introduces `refs_single_ref` to fill in that gap. Signed-off-by: Karthik Nayak <karthik.188@gmail.com> --- refs.c | 12 +++++++++--- refs.h | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-)