| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 1 | #ifndef DIR_H |
| 2 | #define DIR_H |
| 3 | |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 4 | struct dir_entry { |
| Jeff King | e96980e | 2007-06-12 21:42:14 | [diff] [blame] | 5 | unsigned int len; |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 6 | char name[FLEX_ARRAY]; /* more */ |
| 7 | }; |
| 8 | |
| Lars Knoll | 68492fc | 2007-10-28 20:27:13 | [diff] [blame] | 9 | #define EXC_FLAG_NODIR 1 |
| 10 | #define EXC_FLAG_NOWILDCARD 2 |
| 11 | #define EXC_FLAG_ENDSWITH 4 |
| Junio C Hamano | d6b8fc3 | 2008-01-31 09:17:48 | [diff] [blame] | 12 | #define EXC_FLAG_MUSTBEDIR 8 |
| Lars Knoll | 68492fc | 2007-10-28 20:27:13 | [diff] [blame] | 13 | |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 14 | struct exclude_list { |
| 15 | int nr; |
| 16 | int alloc; |
| 17 | struct exclude { |
| 18 | const char *pattern; |
| Lars Knoll | 68492fc | 2007-10-28 20:27:13 | [diff] [blame] | 19 | int patternlen; |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 20 | const char *base; |
| 21 | int baselen; |
| Lars Knoll | 68492fc | 2007-10-28 20:27:13 | [diff] [blame] | 22 | int to_exclude; |
| 23 | int flags; |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 24 | } **excludes; |
| 25 | }; |
| 26 | |
| Junio C Hamano | 63d285c | 2007-11-29 10:17:44 | [diff] [blame] | 27 | struct exclude_stack { |
| 28 | struct exclude_stack *prev; |
| 29 | char *filebuf; |
| 30 | int baselen; |
| 31 | int exclude_ix; |
| 32 | }; |
| 33 | |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 34 | struct dir_struct { |
| 35 | int nr, alloc; |
| Jeff King | 2abd31b | 2007-06-11 13:39:50 | [diff] [blame] | 36 | int ignored_nr, ignored_alloc; |
| Johannes Schindelin | 7c4c97c | 2009-02-16 12:20:25 | [diff] [blame] | 37 | enum { |
| 38 | DIR_SHOW_IGNORED = 1<<0, |
| 39 | DIR_SHOW_OTHER_DIRECTORIES = 1<<1, |
| 40 | DIR_HIDE_EMPTY_DIRECTORIES = 1<<2, |
| 41 | DIR_NO_GITLINKS = 1<<3, |
| 42 | DIR_COLLECT_IGNORED = 1<<4 |
| 43 | } flags; |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 44 | struct dir_entry **entries; |
| Jeff King | 2abd31b | 2007-06-11 13:39:50 | [diff] [blame] | 45 | struct dir_entry **ignored; |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 46 | |
| 47 | /* Exclude info */ |
| 48 | const char *exclude_per_dir; |
| 49 | struct exclude_list exclude_list[3]; |
| Junio C Hamano | 63d285c | 2007-11-29 10:17:44 | [diff] [blame] | 50 | /* |
| 51 | * We maintain three exclude pattern lists: |
| 52 | * EXC_CMDL lists patterns explicitly given on the command line. |
| 53 | * EXC_DIRS lists patterns obtained from per-directory ignore files. |
| 54 | * EXC_FILE lists patterns from fallback ignore files. |
| 55 | */ |
| 56 | #define EXC_CMDL 0 |
| 57 | #define EXC_DIRS 1 |
| 58 | #define EXC_FILE 2 |
| 59 | |
| 60 | struct exclude_stack *exclude_stack; |
| 61 | char basebuf[PATH_MAX]; |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 62 | }; |
| 63 | |
| Junio C Hamano | e813d50 | 2006-12-25 11:09:52 | [diff] [blame] | 64 | #define MATCHED_RECURSIVELY 1 |
| 65 | #define MATCHED_FNMATCH 2 |
| 66 | #define MATCHED_EXACTLY 3 |
| Linus Torvalds | 3c6a370 | 2006-05-19 23:07:51 | [diff] [blame] | 67 | extern int match_pathspec(const char **pathspec, const char *name, int namelen, int prefix, char *seen); |
| 68 | |
| Linus Torvalds | 1d8842d | 2009-05-14 20:22:36 | [diff] [blame] | 69 | extern int fill_directory(struct dir_struct *dir, const char **pathspec); |
| Linus Torvalds | dba2e20 | 2009-07-09 02:24:39 | [diff] [blame] | 70 | extern int read_directory(struct dir_struct *, const char *path, int len, const char **pathspec); |
| Junio C Hamano | f8a9d42 | 2006-12-05 00:00:46 | [diff] [blame] | 71 | |
| Nguyễn Thái Ngọc Duy | cb09753 | 2009-08-20 13:47:04 | [diff] [blame] | 72 | extern int excluded_from_list(const char *pathname, int pathlen, const char *basename, |
| 73 | int *dtype, struct exclude_list *el); |
| Junio C Hamano | 6831a88 | 2008-02-01 04:23:25 | [diff] [blame] | 74 | extern int excluded(struct dir_struct *, const char *, int *); |
| Jens Lehmann | 108da0d | 2010-07-09 22:18:38 | [diff] [blame] | 75 | struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len); |
| Nguyễn Thái Ngọc Duy | cb09753 | 2009-08-20 13:47:04 | [diff] [blame] | 76 | extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen, |
| 77 | char **buf_p, struct exclude_list *which, int check_index); |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 78 | extern void add_excludes_from_file(struct dir_struct *, const char *fname); |
| 79 | extern void add_exclude(const char *string, const char *base, |
| 80 | int baselen, struct exclude_list *which); |
| Nguyễn Thái Ngọc Duy | 0fd0e24 | 2010-11-26 18:17:44 | [diff] [blame] | 81 | extern void free_excludes(struct exclude_list *el); |
| Jeff King | c91f0d9 | 2006-09-08 08:05:34 | [diff] [blame] | 82 | extern int file_exists(const char *); |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 83 | |
| Johannes Schindelin | e663674 | 2007-08-01 00:29:17 | [diff] [blame] | 84 | extern char *get_relative_cwd(char *buffer, int size, const char *dir); |
| 85 | extern int is_inside_dir(const char *dir); |
| 86 | |
| Alexander Potashev | 8ca12c0 | 2009-01-10 12:07:50 | [diff] [blame] | 87 | static inline int is_dot_or_dotdot(const char *name) |
| 88 | { |
| 89 | return (name[0] == '.' && |
| 90 | (name[1] == '\0' || |
| 91 | (name[1] == '.' && name[2] == '\0'))); |
| 92 | } |
| 93 | |
| Alexander Potashev | 55892d2 | 2009-01-11 12:19:12 | [diff] [blame] | 94 | extern int is_empty_dir(const char *dir); |
| 95 | |
| Junio C Hamano | 039bc64 | 2007-11-14 08:05:00 | [diff] [blame] | 96 | extern void setup_standard_excludes(struct dir_struct *dir); |
| Junio C Hamano | a0f4afb | 2009-06-30 22:33:45 | [diff] [blame] | 97 | |
| 98 | #define REMOVE_DIR_EMPTY_ONLY 01 |
| 99 | #define REMOVE_DIR_KEEP_NESTED_GIT 02 |
| 100 | extern int remove_dir_recursively(struct strbuf *path, int flag); |
| Johannes Schindelin | 7155b72 | 2007-09-28 15:28:54 | [diff] [blame] | 101 | |
| Alex Riesen | 4a92d1b | 2008-09-26 22:56:46 | [diff] [blame] | 102 | /* tries to remove the path with empty directories along it, ignores ENOENT */ |
| 103 | extern int remove_path(const char *path); |
| 104 | |
| Joshua Jensen | 8cf2a84 | 2010-10-03 09:56:41 | [diff] [blame] | 105 | extern int strcmp_icase(const char *a, const char *b); |
| 106 | extern int strncmp_icase(const char *a, const char *b, size_t count); |
| 107 | extern int fnmatch_icase(const char *pattern, const char *string, int flags); |
| 108 | |
| Linus Torvalds | 453ec4b | 2006-05-17 02:02:14 | [diff] [blame] | 109 | #endif |