]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs_ref_iterator_begin(): new function
authorMichael Haggerty <mhagger@alum.mit.edu>
Mon, 20 Mar 2017 16:33:08 +0000 (17:33 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 14 Apr 2017 10:54:31 +0000 (03:54 -0700)
Extract a new function from `do_for_each_ref()`. It will be useful
elsewhere.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c
refs/refs-internal.h

diff --git a/refs.c b/refs.c
index aa461156c4eb3affbda8ed6e73a4283d19f58eb9..2ae18097d4d66346fa702665c6fe21b5c4770207 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1230,6 +1230,18 @@ int head_ref(each_ref_fn fn, void *cb_data)
        return head_ref_submodule(NULL, fn, cb_data);
 }
 
+struct ref_iterator *refs_ref_iterator_begin(
+               struct ref_store *refs,
+               const char *prefix, int trim, int flags)
+{
+       struct ref_iterator *iter;
+
+       iter = refs->be->iterator_begin(refs, prefix, flags);
+       iter = prefix_ref_iterator_begin(iter, prefix, trim);
+
+       return iter;
+}
+
 /*
  * Call fn for each reference in the specified submodule for which the
  * refname begins with prefix. If trim is non-zero, then trim that
@@ -1247,8 +1259,7 @@ static int do_for_each_ref(struct ref_store *refs, const char *prefix,
        if (!refs)
                return 0;
 
-       iter = refs->be->iterator_begin(refs, prefix, flags);
-       iter = prefix_ref_iterator_begin(iter, prefix, trim);
+       iter = refs_ref_iterator_begin(refs, prefix, trim, flags);
 
        return do_for_each_ref_iterator(iter, fn, cb_data);
 }
index 6ee9f20dbc0e71bd37be0ca260eba6db7695a569..545989ae7f7d7e85fc58667297cb9706c8013c73 100644 (file)
@@ -335,6 +335,17 @@ struct ref_iterator *empty_ref_iterator_begin(void);
  */
 int is_empty_ref_iterator(struct ref_iterator *ref_iterator);
 
+/*
+ * Return an iterator that goes over each reference in `refs` for
+ * which the refname begins with prefix. If trim is non-zero, then
+ * trim that many characters off the beginning of each refname. flags
+ * can be DO_FOR_EACH_INCLUDE_BROKEN to include broken references in
+ * the iteration.
+ */
+struct ref_iterator *refs_ref_iterator_begin(
+               struct ref_store *refs,
+               const char *prefix, int trim, int flags);
+
 /*
  * A callback function used to instruct merge_ref_iterator how to
  * interleave the entries from iter0 and iter1. The function should