summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2010-12-15 22:02:44 +0700
committerJunio C Hamano <gitster@pobox.com>2011-02-03 14:08:30 -0800
commitbc96cc87dbb229cbdabfd93391e24ef168713a74 (patch)
tree9ff90a888efab369476fe4003fe1e36fa0fbd9ba /dir.c
parent58c4d66619eb21fa23a1305401e0ec4988c1c17e (diff)
downloadgit-bc96cc87dbb229cbdabfd93391e24ef168713a74.tar.gz
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.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/dir.c b/dir.c
index 70d10bc3da..c3bddb60c8 100644
--- a/dir.c
+++ b/dir.c
@@ -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