[PATCH v5 04/11] ref-filter: add option to filter only tags
flat view
STALE3771d
From: Karthik Nayak <hidden>
Date: 2016-06-15 23:05:53
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Karthik Nayak <redacted>
Add a functions called 'for_each_tag_ref_fullpath()' to refs.{c,h}
which iterates through each tag ref without trimming the path.
Add an option in 'filter_refs()' to use 'for_each_tag_ref_fullpath()'
and filter refs. This type checking is done by adding a
'FILTER_REFS_TAGS' in 'ref-filter.h'
Mentored-by: Christian Couder [off-list ref]
Mentored-by: Matthieu Moy [off-list ref]
Signed-off-by: Karthik Nayak <redacted>
---
ref-filter.c | 2 ++
ref-filter.h | 1 +
refs.c | 5 +++++
refs.h | 1 +
4 files changed, 9 insertions(+)
diff --git a/ref-filter.c b/ref-filter.c
index 7ab34be..6e01b44 100644
--- a/ref-filter.c
+++ b/ref-filter.c@@ -1152,6 +1152,8 @@ int filter_refs(struct ref_array *array, struct ref_filter *filter, unsigned int ret = for_each_rawref(ref_filter_handler, &ref_cbdata); else if (type & FILTER_REFS_ALL) ret = for_each_ref(ref_filter_handler, &ref_cbdata); + else if (type & FILTER_REFS_TAGS) + ret = for_each_tag_ref_fullpath(ref_filter_handler, &ref_cbdata); else if (type) die("filter_refs: invalid type");
diff --git a/ref-filter.h b/ref-filter.h
index 63b8175..62ad979 100644
--- a/ref-filter.h
+++ b/ref-filter.h@@ -15,6 +15,7 @@ #define FILTER_REFS_INCLUDE_BROKEN 0x1 #define FILTER_REFS_ALL 0x2 +#define FILTER_REFS_TAGS 0x4 struct atom_value { const char *s;
diff --git a/refs.c b/refs.c
index 0b96ece..23ce483 100644
--- a/refs.c
+++ b/refs.c@@ -2108,6 +2108,11 @@ int for_each_tag_ref(each_ref_fn fn, void *cb_data) return for_each_ref_in("refs/tags/", fn, cb_data); } +int for_each_tag_ref_fullpath(each_ref_fn fn, void *cb_data) +{ + return do_for_each_ref(&ref_cache, "refs/tags/", fn, 0, 0, cb_data); +} + int for_each_tag_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data) { return for_each_ref_in_submodule(submodule, "refs/tags/", fn, cb_data);
diff --git a/refs.h b/refs.h
index e4e46c3..9eee2de 100644
--- a/refs.h
+++ b/refs.h@@ -174,6 +174,7 @@ extern int head_ref(each_ref_fn fn, void *cb_data); extern int for_each_ref(each_ref_fn fn, void *cb_data); extern int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data); extern int for_each_tag_ref(each_ref_fn fn, void *cb_data); +extern int for_each_tag_ref_fullpath(each_ref_fn fn, void *cb_data); extern int for_each_branch_ref(each_ref_fn fn, void *cb_data); extern int for_each_remote_ref(each_ref_fn fn, void *cb_data); extern int for_each_replace_ref(each_ref_fn fn, void *cb_data);
--
2.4.6