diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2012-11-18 16:13:06 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-11-19 13:08:28 -0800 |
commit | 170260ae90cb6a0fec476e7d970e3ac3e81e98f5 (patch) | |
tree | 0c342d4b08c483cf1035c1945113a96ab8057f14 | |
parent | f3828dc0669826660f5034a468913115675ff501 (diff) | |
download | git-170260ae90cb6a0fec476e7d970e3ac3e81e98f5.tar.gz |
pathspec: save the non-wildcard length part
We mark pathspec with wildcards with the field use_wildcard. We
could do better by saving the length of the non-wildcard part, which
can be used for optimizations such as f9f6e2c (exclude: do strcmp as
much as possible before fnmatch - 2012-06-07).
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/ls-files.c | 2 | ||||
-rw-r--r-- | builtin/ls-tree.c | 2 | ||||
-rw-r--r-- | cache.h | 2 | ||||
-rw-r--r-- | dir.c | 6 | ||||
-rw-r--r-- | tree-walk.c | 4 |
5 files changed, 8 insertions, 8 deletions
diff --git a/builtin/ls-files.c b/builtin/ls-files.c index b5434af0c8..4a9ee690c7 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -337,7 +337,7 @@ void overlay_tree_on_cache(const char *tree_name, const char *prefix) matchbuf[0] = prefix; matchbuf[1] = NULL; init_pathspec(&pathspec, matchbuf); - pathspec.items[0].use_wildcard = 0; + pathspec.items[0].nowildcard_len = pathspec.items[0].len; } else init_pathspec(&pathspec, NULL); if (read_tree(tree, 1, &pathspec)) diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c index 235c17cc01..fb76e38d84 100644 --- a/builtin/ls-tree.c +++ b/builtin/ls-tree.c @@ -168,7 +168,7 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix) init_pathspec(&pathspec, get_pathspec(prefix, argv + 1)); for (i = 0; i < pathspec.nr; i++) - pathspec.items[i].use_wildcard = 0; + pathspec.items[i].nowildcard_len = pathspec.items[i].len; pathspec.has_wildcard = 0; tree = parse_tree_indirect(sha1); if (!tree) @@ -482,7 +482,7 @@ struct pathspec { struct pathspec_item { const char *match; int len; - unsigned int use_wildcard:1; + int nowildcard_len; } *items; }; @@ -230,7 +230,7 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix, return MATCHED_RECURSIVELY; } - if (item->use_wildcard && !fnmatch(match, name, 0)) + if (item->nowildcard_len < item->len && !fnmatch(match, name, 0)) return MATCHED_FNMATCH; return 0; @@ -1429,8 +1429,8 @@ int init_pathspec(struct pathspec *pathspec, const char **paths) item->match = path; item->len = strlen(path); - item->use_wildcard = !no_wildcard(path); - if (item->use_wildcard) + item->nowildcard_len = simple_length(path); + if (item->nowildcard_len < item->len) pathspec->has_wildcard = 1; } diff --git a/tree-walk.c b/tree-walk.c index 3f54c02d76..af871c50d1 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -626,7 +626,7 @@ enum interesting tree_entry_interesting(const struct name_entry *entry, &never_interesting)) return entry_interesting; - if (item->use_wildcard) { + if (item->nowildcard_len < item->len) { if (!fnmatch(match + baselen, entry->path, 0)) return entry_interesting; @@ -642,7 +642,7 @@ enum interesting tree_entry_interesting(const struct name_entry *entry, } match_wildcards: - if (!item->use_wildcard) + if (item->nowildcard_len == item->len) continue; /* |