Commit de70bb46 by Patrick Steinhardt

global: convert trivial `fnmatch` users to use `wildcard`

Upstream git.git has converted its codebase to use wildcard in
favor of fnmatch in commit 70a8fc999d (stop using fnmatch (either
native or compat), 2014-02-15). To keep our own regex-matching in
line with what git does, convert all trivial instances of
`fnmatch` usage to use `wildcard`, instead. Trivial usage is
defined to be use of `fnmatch` with either no flags or flags that
have a 1:1 equivalent in wildmatch (PATHNAME, IGNORECASE).
parent 451df793
...@@ -14,13 +14,13 @@ ...@@ -14,13 +14,13 @@
#include "commit.h" #include "commit.h"
#include "commit_list.h" #include "commit_list.h"
#include "fnmatch.h"
#include "oidmap.h" #include "oidmap.h"
#include "refs.h" #include "refs.h"
#include "repository.h" #include "repository.h"
#include "revwalk.h" #include "revwalk.h"
#include "tag.h" #include "tag.h"
#include "vector.h" #include "vector.h"
#include "wildmatch.h"
/* Ported from https://github.com/git/git/blob/89dde7882f71f846ccd0359756d27bebc31108de/builtin/describe.c */ /* Ported from https://github.com/git/git/blob/89dde7882f71f846ccd0359756d27bebc31108de/builtin/describe.c */
...@@ -215,7 +215,7 @@ static int get_name(const char *refname, void *payload) ...@@ -215,7 +215,7 @@ static int get_name(const char *refname, void *payload)
return 0; return 0;
/* Accept only tags that match the pattern, if given */ /* Accept only tags that match the pattern, if given */
if (data->opts->pattern && (!is_tag || p_fnmatch(data->opts->pattern, if (data->opts->pattern && (!is_tag || wildmatch(data->opts->pattern,
refname + strlen(GIT_REFS_TAGS_DIR), 0))) refname + strlen(GIT_REFS_TAGS_DIR), 0)))
return 0; return 0;
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "attrcache.h" #include "attrcache.h"
#include "path.h" #include "path.h"
#include "config.h" #include "config.h"
#include "fnmatch.h" #include "wildmatch.h"
#define GIT_IGNORE_INTERNAL "[internal]exclude" #define GIT_IGNORE_INTERNAL "[internal]exclude"
...@@ -101,7 +101,7 @@ static int does_negate_pattern(git_attr_fnmatch *rule, git_attr_fnmatch *neg) ...@@ -101,7 +101,7 @@ static int does_negate_pattern(git_attr_fnmatch *rule, git_attr_fnmatch *neg)
*/ */
static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match) static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match)
{ {
int error = 0, fnflags; int error = 0, wildmatch_flags;
size_t i; size_t i;
git_attr_fnmatch *rule; git_attr_fnmatch *rule;
char *path; char *path;
...@@ -109,9 +109,9 @@ static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match ...@@ -109,9 +109,9 @@ static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match
*out = 0; *out = 0;
fnflags = FNM_PATHNAME; wildmatch_flags = WM_PATHNAME;
if (match->flags & GIT_ATTR_FNMATCH_ICASE) if (match->flags & GIT_ATTR_FNMATCH_ICASE)
fnflags |= FNM_IGNORECASE; wildmatch_flags |= WM_CASEFOLD;
/* path of the file relative to the workdir, so we match the rules in subdirs */ /* path of the file relative to the workdir, so we match the rules in subdirs */
if (match->containing_dir) { if (match->containing_dir) {
...@@ -141,13 +141,13 @@ static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match ...@@ -141,13 +141,13 @@ static int does_negate_rule(int *out, git_vector *rules, git_attr_fnmatch *match
if (git_buf_oom(&buf)) if (git_buf_oom(&buf))
goto out; goto out;
if ((error = p_fnmatch(git_buf_cstr(&buf), path, fnflags)) < 0) { if ((error = wildmatch(git_buf_cstr(&buf), path, wildmatch_flags)) < 0) {
git_error_set(GIT_ERROR_INVALID, "error matching pattern"); git_error_set(GIT_ERROR_INVALID, "error matching pattern");
goto out; goto out;
} }
/* if we found a match, we want to keep this rule */ /* if we found a match, we want to keep this rule */
if (error != FNM_NOMATCH) { if (error != WM_NOMATCH) {
*out = 1; *out = 1;
error = 0; error = 0;
goto out; goto out;
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "index.h" #include "index.h"
#include "bitvec.h" #include "bitvec.h"
#include "diff.h" #include "diff.h"
#include "fnmatch.h" #include "wildmatch.h"
/* what is the common non-wildcard prefix for all items in the pathspec */ /* what is the common non-wildcard prefix for all items in the pathspec */
char *git_pathspec_prefix(const git_strarray *pathspec) char *git_pathspec_prefix(const git_strarray *pathspec)
...@@ -111,7 +111,7 @@ void git_pathspec__vfree(git_vector *vspec) ...@@ -111,7 +111,7 @@ void git_pathspec__vfree(git_vector *vspec)
} }
struct pathspec_match_context { struct pathspec_match_context {
int fnmatch_flags; int wildmatch_flags;
int (*strcomp)(const char *, const char *); int (*strcomp)(const char *, const char *);
int (*strncomp)(const char *, const char *, size_t); int (*strncomp)(const char *, const char *, size_t);
}; };
...@@ -122,11 +122,11 @@ static void pathspec_match_context_init( ...@@ -122,11 +122,11 @@ static void pathspec_match_context_init(
bool casefold) bool casefold)
{ {
if (disable_fnmatch) if (disable_fnmatch)
ctxt->fnmatch_flags = -1; ctxt->wildmatch_flags = -1;
else if (casefold) else if (casefold)
ctxt->fnmatch_flags = FNM_CASEFOLD; ctxt->wildmatch_flags = WM_CASEFOLD;
else else
ctxt->fnmatch_flags = 0; ctxt->wildmatch_flags = 0;
if (casefold) { if (casefold) {
ctxt->strcomp = git__strcasecmp; ctxt->strcomp = git__strcasecmp;
...@@ -142,16 +142,16 @@ static int pathspec_match_one( ...@@ -142,16 +142,16 @@ static int pathspec_match_one(
struct pathspec_match_context *ctxt, struct pathspec_match_context *ctxt,
const char *path) const char *path)
{ {
int result = (match->flags & GIT_ATTR_FNMATCH_MATCH_ALL) ? 0 : FNM_NOMATCH; int result = (match->flags & GIT_ATTR_FNMATCH_MATCH_ALL) ? 0 : WM_NOMATCH;
if (result == FNM_NOMATCH) if (result == WM_NOMATCH)
result = ctxt->strcomp(match->pattern, path) ? FNM_NOMATCH : 0; result = ctxt->strcomp(match->pattern, path) ? WM_NOMATCH : 0;
if (ctxt->fnmatch_flags >= 0 && result == FNM_NOMATCH) if (ctxt->wildmatch_flags >= 0 && result == WM_NOMATCH)
result = p_fnmatch(match->pattern, path, ctxt->fnmatch_flags); result = wildmatch(match->pattern, path, ctxt->wildmatch_flags);
/* if we didn't match, look for exact dirname prefix match */ /* if we didn't match, look for exact dirname prefix match */
if (result == FNM_NOMATCH && if (result == WM_NOMATCH &&
(match->flags & GIT_ATTR_FNMATCH_HASWILD) == 0 && (match->flags & GIT_ATTR_FNMATCH_HASWILD) == 0 &&
ctxt->strncomp(path, match->pattern, match->length) == 0 && ctxt->strncomp(path, match->pattern, match->length) == 0 &&
path[match->length] == '/') path[match->length] == '/')
...@@ -160,7 +160,7 @@ static int pathspec_match_one( ...@@ -160,7 +160,7 @@ static int pathspec_match_one(
/* if we didn't match and this is a negative match, check for exact /* if we didn't match and this is a negative match, check for exact
* match of filename with leading '!' * match of filename with leading '!'
*/ */
if (result == FNM_NOMATCH && if (result == WM_NOMATCH &&
(match->flags & GIT_ATTR_FNMATCH_NEGATIVE) != 0 && (match->flags & GIT_ATTR_FNMATCH_NEGATIVE) != 0 &&
*path == '!' && *path == '!' &&
ctxt->strncomp(path + 1, match->pattern, match->length) == 0 && ctxt->strncomp(path + 1, match->pattern, match->length) == 0 &&
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include "iterator.h" #include "iterator.h"
#include "sortedcache.h" #include "sortedcache.h"
#include "signature.h" #include "signature.h"
#include "fnmatch.h" #include "wildmatch.h"
#include <git2/tag.h> #include <git2/tag.h>
#include <git2/object.h> #include <git2/object.h>
...@@ -572,7 +572,7 @@ static int iter_load_loose_paths(refdb_fs_backend *backend, refdb_fs_iter *iter) ...@@ -572,7 +572,7 @@ static int iter_load_loose_paths(refdb_fs_backend *backend, refdb_fs_iter *iter)
ref_name = git_buf_cstr(&path); ref_name = git_buf_cstr(&path);
if (git__suffixcmp(ref_name, ".lock") == 0 || if (git__suffixcmp(ref_name, ".lock") == 0 ||
(iter->glob && p_fnmatch(iter->glob, ref_name, 0) != 0)) (iter->glob && wildmatch(iter->glob, ref_name, 0) != 0))
continue; continue;
ref_dup = git_pool_strdup(&iter->pool, ref_name); ref_dup = git_pool_strdup(&iter->pool, ref_name);
...@@ -618,7 +618,7 @@ static int refdb_fs_backend__iterator_next( ...@@ -618,7 +618,7 @@ static int refdb_fs_backend__iterator_next(
if (ref->flags & PACKREF_SHADOWED) if (ref->flags & PACKREF_SHADOWED)
continue; continue;
if (iter->glob && p_fnmatch(iter->glob, ref->name, 0) != 0) if (iter->glob && wildmatch(iter->glob, ref->name, 0) != 0)
continue; continue;
*out = git_reference__alloc(ref->name, &ref->oid, &ref->peel); *out = git_reference__alloc(ref->name, &ref->oid, &ref->peel);
...@@ -661,7 +661,7 @@ static int refdb_fs_backend__iterator_next_name( ...@@ -661,7 +661,7 @@ static int refdb_fs_backend__iterator_next_name(
if (ref->flags & PACKREF_SHADOWED) if (ref->flags & PACKREF_SHADOWED)
continue; continue;
if (iter->glob && p_fnmatch(iter->glob, ref->name, 0) != 0) if (iter->glob && wildmatch(iter->glob, ref->name, 0) != 0)
continue; continue;
*out = ref->name; *out = ref->name;
......
...@@ -9,10 +9,10 @@ ...@@ -9,10 +9,10 @@
#include "git2/errors.h" #include "git2/errors.h"
#include "util.h"
#include "fnmatch.h"
#include "refs.h" #include "refs.h"
#include "util.h"
#include "vector.h" #include "vector.h"
#include "wildmatch.h"
int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch) int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
{ {
...@@ -213,7 +213,7 @@ int git_refspec_src_matches(const git_refspec *refspec, const char *refname) ...@@ -213,7 +213,7 @@ int git_refspec_src_matches(const git_refspec *refspec, const char *refname)
if (refspec == NULL || refspec->src == NULL) if (refspec == NULL || refspec->src == NULL)
return false; return false;
return (p_fnmatch(refspec->src, refname, 0) == 0); return (wildmatch(refspec->src, refname, 0) == 0);
} }
int git_refspec_dst_matches(const git_refspec *refspec, const char *refname) int git_refspec_dst_matches(const git_refspec *refspec, const char *refname)
...@@ -221,7 +221,7 @@ int git_refspec_dst_matches(const git_refspec *refspec, const char *refname) ...@@ -221,7 +221,7 @@ int git_refspec_dst_matches(const git_refspec *refspec, const char *refname)
if (refspec == NULL || refspec->dst == NULL) if (refspec == NULL || refspec->dst == NULL)
return false; return false;
return (p_fnmatch(refspec->dst, refname, 0) == 0); return (wildmatch(refspec->dst, refname, 0) == 0);
} }
static int refspec_transform( static int refspec_transform(
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "repository.h" #include "repository.h"
#include "ignore.h" #include "ignore.h"
#include "index.h" #include "index.h"
#include "fnmatch.h" #include "wildmatch.h"
#include "git2/diff.h" #include "git2/diff.h"
#include "diff.h" #include "diff.h"
...@@ -457,7 +457,7 @@ struct status_file_info { ...@@ -457,7 +457,7 @@ struct status_file_info {
char *expected; char *expected;
unsigned int count; unsigned int count;
unsigned int status; unsigned int status;
int fnm_flags; int wildmatch_flags;
int ambiguous; int ambiguous;
}; };
...@@ -469,11 +469,11 @@ static int get_one_status(const char *path, unsigned int status, void *data) ...@@ -469,11 +469,11 @@ static int get_one_status(const char *path, unsigned int status, void *data)
sfi->count++; sfi->count++;
sfi->status = status; sfi->status = status;
strcomp = (sfi->fnm_flags & FNM_CASEFOLD) ? git__strcasecmp : git__strcmp; strcomp = (sfi->wildmatch_flags & WM_CASEFOLD) ? git__strcasecmp : git__strcmp;
if (sfi->count > 1 || if (sfi->count > 1 ||
(strcomp(sfi->expected, path) != 0 && (strcomp(sfi->expected, path) != 0 &&
p_fnmatch(sfi->expected, path, sfi->fnm_flags) != 0)) wildmatch(sfi->expected, path, sfi->wildmatch_flags) != 0))
{ {
sfi->ambiguous = true; sfi->ambiguous = true;
return GIT_EAMBIGUOUS; /* git_error_set will be done by caller */ return GIT_EAMBIGUOUS; /* git_error_set will be done by caller */
...@@ -500,7 +500,7 @@ int git_status_file( ...@@ -500,7 +500,7 @@ int git_status_file(
if ((sfi.expected = git__strdup(path)) == NULL) if ((sfi.expected = git__strdup(path)) == NULL)
return -1; return -1;
if (index->ignore_case) if (index->ignore_case)
sfi.fnm_flags = FNM_CASEFOLD; sfi.wildmatch_flags = WM_CASEFOLD;
opts.show = GIT_STATUS_SHOW_INDEX_AND_WORKDIR; opts.show = GIT_STATUS_SHOW_INDEX_AND_WORKDIR;
opts.flags = GIT_STATUS_OPT_INCLUDE_IGNORED | opts.flags = GIT_STATUS_OPT_INCLUDE_IGNORED |
......
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
#include "tag.h" #include "tag.h"
#include "commit.h" #include "commit.h"
#include "fnmatch.h"
#include "signature.h" #include "signature.h"
#include "message.h" #include "message.h"
#include "wildmatch.h"
#include "git2/object.h" #include "git2/object.h"
#include "git2/repository.h" #include "git2/repository.h"
#include "git2/signature.h" #include "git2/signature.h"
...@@ -476,7 +476,7 @@ static int tag_list_cb(const char *tag_name, git_oid *oid, void *data) ...@@ -476,7 +476,7 @@ static int tag_list_cb(const char *tag_name, git_oid *oid, void *data)
GIT_UNUSED(oid); GIT_UNUSED(oid);
if (!*filter->pattern || if (!*filter->pattern ||
p_fnmatch(filter->pattern, tag_name + GIT_REFS_TAGS_DIR_LEN, 0) == 0) wildmatch(filter->pattern, tag_name + GIT_REFS_TAGS_DIR_LEN, 0) == 0)
{ {
char *matched = git__strdup(tag_name + GIT_REFS_TAGS_DIR_LEN); char *matched = git__strdup(tag_name + GIT_REFS_TAGS_DIR_LEN);
GIT_ERROR_CHECK_ALLOC(matched); GIT_ERROR_CHECK_ALLOC(matched);
......
#include "describe_helpers.h" #include "describe_helpers.h"
#include "fnmatch.h" #include "wildmatch.h"
void assert_describe( void assert_describe(
const char *expected_output, const char *expected_output,
...@@ -18,7 +18,7 @@ void assert_describe( ...@@ -18,7 +18,7 @@ void assert_describe(
cl_git_pass(git_describe_commit(&result, object, opts)); cl_git_pass(git_describe_commit(&result, object, opts));
cl_git_pass(git_describe_format(&label, result, fmt_opts)); cl_git_pass(git_describe_format(&label, result, fmt_opts));
cl_must_pass(p_fnmatch(expected_output, git_buf_cstr(&label), 0)); cl_must_pass(wildmatch(expected_output, git_buf_cstr(&label), 0));
git_describe_result_free(result); git_describe_result_free(result);
git_object_free(object); git_object_free(object);
...@@ -37,7 +37,7 @@ void assert_describe_workdir( ...@@ -37,7 +37,7 @@ void assert_describe_workdir(
cl_git_pass(git_describe_workdir(&result, repo, opts)); cl_git_pass(git_describe_workdir(&result, repo, opts));
cl_git_pass(git_describe_format(&label, result, fmt_opts)); cl_git_pass(git_describe_format(&label, result, fmt_opts));
cl_must_pass(p_fnmatch(expected_output, git_buf_cstr(&label), 0)); cl_must_pass(wildmatch(expected_output, git_buf_cstr(&label), 0));
git_describe_result_free(result); git_describe_result_free(result);
git_buf_dispose(&label); git_buf_dispose(&label);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment