aboutsummaryrefslogtreecommitdiff
path: root/dir.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@osdl.org>2006-05-16 19:02:14 -0700
committerJunio C Hamano <junkio@cox.net>2006-05-17 01:56:40 -0700
commit453ec4bdf403c2e89892266a0a660c21680d3f9d (patch)
tree96a90056583d671b032a1c88dd3278492b112c48 /dir.h
parent63dffdf03da65ddf1a02c3215ad15ba109189d42 (diff)
downloadgit-453ec4bdf403c2e89892266a0a660c21680d3f9d.tar.gz
git-453ec4bdf403c2e89892266a0a660c21680d3f9d.tar.xz
libify git-ls-files directory traversal
This moves the core directory traversal and filename exclusion logic into the general git library, making it available for other users directly. If we ever want to do "git commit" or "git add" as a built-in (and we do), we want to be able to handle most of git-ls-files as a library. NOTE! Not all of git-ls-files is libified by this. The index matching and pathspec prefix calculation is still in ls-files.c, but this is a big part of it. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'dir.h')
-rw-r--r--dir.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/dir.h b/dir.h
new file mode 100644
index 000000000..e8fc441e7
--- /dev/null
+++ b/dir.h
@@ -0,0 +1,50 @@
+#ifndef DIR_H
+#define DIR_H
+
+/*
+ * We maintain three exclude pattern lists:
+ * EXC_CMDL lists patterns explicitly given on the command line.
+ * EXC_DIRS lists patterns obtained from per-directory ignore files.
+ * EXC_FILE lists patterns from fallback ignore files.
+ */
+#define EXC_CMDL 0
+#define EXC_DIRS 1
+#define EXC_FILE 2
+
+
+struct dir_entry {
+ int len;
+ char name[FLEX_ARRAY]; /* more */
+};
+
+struct exclude_list {
+ int nr;
+ int alloc;
+ struct exclude {
+ const char *pattern;
+ const char *base;
+ int baselen;
+ } **excludes;
+};
+
+struct dir_struct {
+ int nr, alloc;
+ unsigned int show_ignored:1,
+ show_other_directories:1,
+ hide_empty_directories:1;
+ struct dir_entry **entries;
+
+ /* Exclude info */
+ const char *exclude_per_dir;
+ struct exclude_list exclude_list[3];
+};
+
+extern int read_directory(struct dir_struct *, const char *path, const char *base, int baselen);
+extern int excluded(struct dir_struct *, const char *);
+extern void add_excludes_from_file(struct dir_struct *, const char *fname);
+extern void add_exclude(const char *string, const char *base,
+ int baselen, struct exclude_list *which);
+extern int push_exclude_per_directory(struct dir_struct *,
+ const char *base, int baselen);
+
+#endif