Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 1 | #ifndef DIR_H |
| 2 | #define DIR_H |
| 3 | |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 4 | struct dir_entry { |
Jeff King | e96980e | 2007-06-12 23:42:14 +0200 | [diff] [blame] | 5 | unsigned int len; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 6 | char name[FLEX_ARRAY]; /* more */ |
| 7 | }; |
| 8 | |
Lars Knoll | 68492fc | 2007-10-28 21:27:13 +0100 | [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 01:17:48 -0800 | [diff] [blame] | 12 | #define EXC_FLAG_MUSTBEDIR 8 |
Lars Knoll | 68492fc | 2007-10-28 21:27:13 +0100 | [diff] [blame] | 13 | |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [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 21:27:13 +0100 | [diff] [blame] | 19 | int patternlen; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 20 | const char *base; |
| 21 | int baselen; |
Lars Knoll | 68492fc | 2007-10-28 21:27:13 +0100 | [diff] [blame] | 22 | int to_exclude; |
| 23 | int flags; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 24 | } **excludes; |
| 25 | }; |
| 26 | |
Junio C Hamano | 63d285c | 2007-11-29 02:17:44 -0800 | [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-16 19:02:14 -0700 | [diff] [blame] | 34 | struct dir_struct { |
| 35 | int nr, alloc; |
Jeff King | 2abd31b | 2007-06-11 09:39:50 -0400 | [diff] [blame] | 36 | int ignored_nr, ignored_alloc; |
Johannes Schindelin | 7c4c97c | 2009-02-16 13:20:25 +0100 | [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-16 19:02:14 -0700 | [diff] [blame] | 44 | struct dir_entry **entries; |
Jeff King | 2abd31b | 2007-06-11 09:39:50 -0400 | [diff] [blame] | 45 | struct dir_entry **ignored; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [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 02:17:44 -0800 | [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-16 19:02:14 -0700 | [diff] [blame] | 62 | }; |
| 63 | |
Junio C Hamano | e813d50 | 2006-12-25 03:09:52 -0800 | [diff] [blame] | 64 | #define MATCHED_RECURSIVELY 1 |
| 65 | #define MATCHED_FNMATCH 2 |
| 66 | #define MATCHED_EXACTLY 3 |
Linus Torvalds | 3c6a370 | 2006-05-19 16:07:51 -0700 | [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 13:22:36 -0700 | [diff] [blame] | 69 | extern int fill_directory(struct dir_struct *dir, const char **pathspec); |
Linus Torvalds | dba2e20 | 2009-07-08 19:24:39 -0700 | [diff] [blame] | 70 | extern int read_directory(struct dir_struct *, const char *path, int len, const char **pathspec); |
Junio C Hamano | f8a9d42 | 2006-12-04 16:00:46 -0800 | [diff] [blame] | 71 | |
Nguyễn Thái Ngọc Duy | cb09753 | 2009-08-20 20:47:04 +0700 | [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-01-31 20:23:25 -0800 | [diff] [blame] | 74 | extern int excluded(struct dir_struct *, const char *, int *); |
Nguyễn Thái Ngọc Duy | cb09753 | 2009-08-20 20:47:04 +0700 | [diff] [blame] | 75 | extern int add_excludes_from_file_to_list(const char *fname, const char *base, int baselen, |
| 76 | char **buf_p, struct exclude_list *which, int check_index); |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 77 | extern void add_excludes_from_file(struct dir_struct *, const char *fname); |
| 78 | extern void add_exclude(const char *string, const char *base, |
| 79 | int baselen, struct exclude_list *which); |
Jeff King | c91f0d9 | 2006-09-08 04:05:34 -0400 | [diff] [blame] | 80 | extern int file_exists(const char *); |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 81 | |
Johannes Schindelin | e663674 | 2007-08-01 01:29:17 +0100 | [diff] [blame] | 82 | extern char *get_relative_cwd(char *buffer, int size, const char *dir); |
| 83 | extern int is_inside_dir(const char *dir); |
| 84 | |
Alexander Potashev | 8ca12c0 | 2009-01-10 15:07:50 +0300 | [diff] [blame] | 85 | static inline int is_dot_or_dotdot(const char *name) |
| 86 | { |
| 87 | return (name[0] == '.' && |
| 88 | (name[1] == '\0' || |
| 89 | (name[1] == '.' && name[2] == '\0'))); |
| 90 | } |
| 91 | |
Alexander Potashev | 55892d2 | 2009-01-11 15:19:12 +0300 | [diff] [blame] | 92 | extern int is_empty_dir(const char *dir); |
| 93 | |
Junio C Hamano | 039bc64 | 2007-11-14 00:05:00 -0800 | [diff] [blame] | 94 | extern void setup_standard_excludes(struct dir_struct *dir); |
Junio C Hamano | a0f4afb | 2009-06-30 15:33:45 -0700 | [diff] [blame] | 95 | |
| 96 | #define REMOVE_DIR_EMPTY_ONLY 01 |
| 97 | #define REMOVE_DIR_KEEP_NESTED_GIT 02 |
| 98 | extern int remove_dir_recursively(struct strbuf *path, int flag); |
Johannes Schindelin | 7155b72 | 2007-09-28 16:28:54 +0100 | [diff] [blame] | 99 | |
Alex Riesen | 4a92d1b | 2008-09-27 00:56:46 +0200 | [diff] [blame] | 100 | /* tries to remove the path with empty directories along it, ignores ENOENT */ |
| 101 | extern int remove_path(const char *path); |
| 102 | |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 103 | #endif |