summaryrefslogtreecommitdiff
path: root/dir.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-07-11 19:44:34 (GMT)
committerJunio C Hamano <gitster@pobox.com>2012-07-11 19:44:35 (GMT)
commitcd733f4f713d46bc175fd57fc9a168ea4f846148 (patch)
tree55214b405870898162163c45daecf651d14a826c /dir.h
parentfb60f344e441788040dbeec8f85ccd826ceaacd1 (diff)
parent0d316f0ceff1c416c25327f40bc5fbdded98a01a (diff)
downloadgit-cd733f4f713d46bc175fd57fc9a168ea4f846148.zip
git-cd733f4f713d46bc175fd57fc9a168ea4f846148.tar.gz
git-cd733f4f713d46bc175fd57fc9a168ea4f846148.tar.bz2
Merge branch 'jc/ls-files-i-dir' into maint
"git ls-files --exclude=t -i" did not consider anything under t/ as excluded, as it did not pay attention to exclusion of leading paths while walking the index. Other two users of excluded() are also updated. * jc/ls-files-i-dir: dir.c: make excluded() file scope static unpack-trees.c: use path_excluded() in check_ok_to_remove() builtin/add.c: use path_excluded() path_excluded(): update API to less cache-entry centric ls-files -i: micro-optimize path_excluded() ls-files -i: pay attention to exclusion of leading paths
Diffstat (limited to 'dir.h')
-rw-r--r--dir.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/dir.h b/dir.h
index 58b6fc7..6c73e41 100644
--- a/dir.h
+++ b/dir.h
@@ -1,6 +1,8 @@
#ifndef DIR_H
#define DIR_H
+#include "strbuf.h"
+
struct dir_entry {
unsigned int len;
char name[FLEX_ARRAY]; /* more */
@@ -76,8 +78,22 @@ extern int read_directory(struct dir_struct *, const char *path, int len, const
extern int excluded_from_list(const char *pathname, int pathlen, const char *basename,
int *dtype, struct exclude_list *el);
-extern int excluded(struct dir_struct *, const char *, int *);
struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len);
+
+/*
+ * The excluded() API is meant for callers that check each level of leading
+ * directory hierarchies with excluded() to avoid recursing into excluded
+ * directories. Callers that do not do so should use this API instead.
+ */
+struct path_exclude_check {
+ struct dir_struct *dir;
+ struct strbuf path;
+};
+extern void path_exclude_check_init(struct path_exclude_check *, struct dir_struct *);
+extern void path_exclude_check_clear(struct path_exclude_check *);
+extern int path_excluded(struct path_exclude_check *, const char *, int namelen, int *dtype);
+
+
extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen,
char **buf_p, struct exclude_list *which, int check_index);
extern void add_excludes_from_file(struct dir_struct *, const char *fname);