diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2010-12-15 16:02:44 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-02-03 23:08:30 +0100 |
commit | bc96cc87dbb229cbdabfd93391e24ef168713a74 (patch) | |
tree | 9ff90a888efab369476fe4003fe1e36fa0fbd9ba /dir.c | |
parent | tree_entry_interesting(): refactor into separate smaller functions (diff) | |
download | git-bc96cc87dbb229cbdabfd93391e24ef168713a74.tar.xz git-bc96cc87dbb229cbdabfd93391e24ef168713a74.zip |
tree_entry_interesting(): support depth limit
This is needed to replace pathspec_matches() in builtin/grep.c.
max_depth == -1 means infinite depth. Depth limit is only effective
when pathspec.recursive == 1. When pathspec.recursive == 0, the
behavior depends on match functions: non-recursive for
tree_entry_interesting() and recursive for match_pathspec{,_depth}
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -87,6 +87,21 @@ int fill_directory(struct dir_struct *dir, const char **pathspec) return len; } +int within_depth(const char *name, int namelen, + int depth, int max_depth) +{ + const char *cp = name, *cpe = name + namelen; + + while (cp < cpe) { + if (*cp++ != '/') + continue; + depth++; + if (depth > max_depth) + return 0; + } + return 1; +} + /* * Does 'match' match the given name? * A match is found if |