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 |
| 12 | |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 13 | struct exclude_list { |
| 14 | int nr; |
| 15 | int alloc; |
| 16 | struct exclude { |
| 17 | const char *pattern; |
Lars Knoll | 68492fc | 2007-10-28 21:27:13 +0100 | [diff] [blame] | 18 | int patternlen; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 19 | const char *base; |
| 20 | int baselen; |
Lars Knoll | 68492fc | 2007-10-28 21:27:13 +0100 | [diff] [blame] | 21 | int to_exclude; |
| 22 | int flags; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 23 | } **excludes; |
| 24 | }; |
| 25 | |
Junio C Hamano | 63d285c | 2007-11-29 02:17:44 -0800 | [diff] [blame] | 26 | struct exclude_stack { |
| 27 | struct exclude_stack *prev; |
| 28 | char *filebuf; |
| 29 | int baselen; |
| 30 | int exclude_ix; |
| 31 | }; |
| 32 | |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 33 | struct dir_struct { |
| 34 | int nr, alloc; |
Jeff King | 2abd31b | 2007-06-11 09:39:50 -0400 | [diff] [blame] | 35 | int ignored_nr, ignored_alloc; |
Junio C Hamano | c889763 | 2006-12-29 10:08:19 -0800 | [diff] [blame] | 36 | unsigned int show_ignored:1, |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 37 | show_other_directories:1, |
Linus Torvalds | 0959525 | 2007-04-11 14:49:44 -0700 | [diff] [blame] | 38 | hide_empty_directories:1, |
Jeff King | 2abd31b | 2007-06-11 09:39:50 -0400 | [diff] [blame] | 39 | no_gitlinks:1, |
| 40 | collect_ignored:1; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 41 | struct dir_entry **entries; |
Jeff King | 2abd31b | 2007-06-11 09:39:50 -0400 | [diff] [blame] | 42 | struct dir_entry **ignored; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 43 | |
| 44 | /* Exclude info */ |
| 45 | const char *exclude_per_dir; |
| 46 | struct exclude_list exclude_list[3]; |
Junio C Hamano | 63d285c | 2007-11-29 02:17:44 -0800 | [diff] [blame] | 47 | /* |
| 48 | * We maintain three exclude pattern lists: |
| 49 | * EXC_CMDL lists patterns explicitly given on the command line. |
| 50 | * EXC_DIRS lists patterns obtained from per-directory ignore files. |
| 51 | * EXC_FILE lists patterns from fallback ignore files. |
| 52 | */ |
| 53 | #define EXC_CMDL 0 |
| 54 | #define EXC_DIRS 1 |
| 55 | #define EXC_FILE 2 |
| 56 | |
| 57 | struct exclude_stack *exclude_stack; |
| 58 | char basebuf[PATH_MAX]; |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 59 | }; |
| 60 | |
Linus Torvalds | 3c6a370 | 2006-05-19 16:07:51 -0700 | [diff] [blame] | 61 | extern int common_prefix(const char **pathspec); |
Junio C Hamano | e813d50 | 2006-12-25 03:09:52 -0800 | [diff] [blame] | 62 | |
| 63 | #define MATCHED_RECURSIVELY 1 |
| 64 | #define MATCHED_FNMATCH 2 |
| 65 | #define MATCHED_EXACTLY 3 |
Linus Torvalds | 3c6a370 | 2006-05-19 16:07:51 -0700 | [diff] [blame] | 66 | extern int match_pathspec(const char **pathspec, const char *name, int namelen, int prefix, char *seen); |
| 67 | |
Linus Torvalds | 9fc42d6 | 2007-03-30 20:39:30 -0700 | [diff] [blame] | 68 | extern int read_directory(struct dir_struct *, const char *path, const char *base, int baselen, const char **pathspec); |
Junio C Hamano | f8a9d42 | 2006-12-04 16:00:46 -0800 | [diff] [blame] | 69 | |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 70 | extern int excluded(struct dir_struct *, const char *); |
| 71 | extern void add_excludes_from_file(struct dir_struct *, const char *fname); |
| 72 | extern void add_exclude(const char *string, const char *base, |
| 73 | int baselen, struct exclude_list *which); |
Jeff King | c91f0d9 | 2006-09-08 04:05:34 -0400 | [diff] [blame] | 74 | extern int file_exists(const char *); |
Junio C Hamano | 4d06f8a | 2006-12-29 11:01:31 -0800 | [diff] [blame] | 75 | extern struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len); |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 76 | |
Johannes Schindelin | e663674 | 2007-08-01 01:29:17 +0100 | [diff] [blame] | 77 | extern char *get_relative_cwd(char *buffer, int size, const char *dir); |
| 78 | extern int is_inside_dir(const char *dir); |
| 79 | |
Junio C Hamano | 039bc64 | 2007-11-14 00:05:00 -0800 | [diff] [blame] | 80 | extern void setup_standard_excludes(struct dir_struct *dir); |
Johannes Schindelin | 7155b72 | 2007-09-28 16:28:54 +0100 | [diff] [blame] | 81 | extern int remove_dir_recursively(struct strbuf *path, int only_empty); |
| 82 | |
Linus Torvalds | 453ec4b | 2006-05-16 19:02:14 -0700 | [diff] [blame] | 83 | #endif |