summaryrefslogtreecommitdiff
path: root/refs.c
diff options
context:
space:
mode:
authorKarthik Nayak <karthik.188@gmail.com>2015-09-10 15:48:23 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-09-17 17:02:48 (GMT)
commit5b4f28510f36062134390ad8818721c1d4a2760f (patch)
tree20d7554e7eabaa2d6f20bc59acc081af6b9cfe05 /refs.c
parentce59208293f793ae822b5bfdf4040739f1c3ccb7 (diff)
downloadgit-5b4f28510f36062134390ad8818721c1d4a2760f.zip
git-5b4f28510f36062134390ad8818721c1d4a2760f.tar.gz
git-5b4f28510f36062134390ad8818721c1d4a2760f.tar.bz2
ref-filter: add option to filter out tags, branches and remotes
Add a function called 'for_each_fullref_in()' to refs.{c,h} which iterates through each ref for the given path without trimming the path and also accounting for broken refs, if mentioned. Add 'filter_ref_kind()' in ref-filter.c to check the kind of ref being handled and return the kind to 'ref_filter_handler()', where we discard refs which we do not need and assign the kind to needed refs. Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/refs.c b/refs.c
index 84b1aff..943ac5e 100644
--- a/refs.c
+++ b/refs.c
@@ -2108,6 +2108,15 @@ int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
return do_for_each_ref(&ref_cache, prefix, fn, strlen(prefix), 0, cb_data);
}
+int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data, unsigned int broken)
+{
+ unsigned int flag = 0;
+
+ if (broken)
+ flag = DO_FOR_EACH_INCLUDE_BROKEN;
+ return do_for_each_ref(&ref_cache, prefix, fn, 0, flag, cb_data);
+}
+
int for_each_ref_in_submodule(const char *submodule, const char *prefix,
each_ref_fn fn, void *cb_data)
{