[PATCHv2 1/4] refs: add common refname_match_patterns()
From: Tom Grennan <hidden>
Date: 2016-06-15 22:53:02
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Tom Grennan <redacted> --- refs.c | 14 ++++++++++++++ refs.h | 8 ++++++++ 2 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/refs.c b/refs.c
index b8843bb..b42eb4a 100644
--- a/refs.c
+++ b/refs.c@@ -1057,6 +1057,20 @@ int refname_match(const char *abbrev_name, const char *full_name, const char **r return 0; } +int refname_match_patterns(const char **patterns, const char *refname) +{ + int given_match_pattern = 0, had_match = 0; + + for (; *patterns; patterns++) + if (**patterns != '!') { + given_match_pattern = 1; + if (!fnmatch(*patterns, refname, 0)) + had_match = 1; + } else if (!fnmatch(*patterns+1, refname, 0)) + return 0; + return given_match_pattern ? had_match : 1; +} + static struct ref_lock *verify_lock(struct ref_lock *lock, const unsigned char *old_sha1, int mustexist) {
diff --git a/refs.h b/refs.h
index 00ba1e2..13015ba 100644
--- a/refs.h
+++ b/refs.h@@ -152,4 +152,12 @@ int update_ref(const char *action, const char *refname, const unsigned char *sha1, const unsigned char *oldval, int flags, enum action_on_err onerr); +/** + * Returns: + * 1 with NULL patterns + * 0 if refname fnmatch()es any ! prefaced pattern + * 1 if refname fnmatch()es any pattern + */ +extern int refname_match_patterns(const char **patterns, const char *refname); + #endif /* REFS_H */
--
1.7.8