]>
Commit | Line | Data |
---|---|---|
6f525e71 AS |
1 | #ifndef PATHSPEC_H |
2 | #define PATHSPEC_H | |
3 | ||
87323bda NTND |
4 | /* Pathspec magic */ |
5 | #define PATHSPEC_FROMTOP (1<<0) | |
6330a171 | 6 | #define PATHSPEC_MAXDEPTH (1<<1) |
5c6933d2 | 7 | #define PATHSPEC_LITERAL (1<<2) |
bd30c2e4 | 8 | #define PATHSPEC_GLOB (1<<3) |
6330a171 NTND |
9 | #define PATHSPEC_ALL_MAGIC \ |
10 | (PATHSPEC_FROMTOP | \ | |
5c6933d2 | 11 | PATHSPEC_MAXDEPTH | \ |
bd30c2e4 NTND |
12 | PATHSPEC_LITERAL | \ |
13 | PATHSPEC_GLOB) | |
87323bda | 14 | |
64acde94 NTND |
15 | #define PATHSPEC_ONESTAR 1 /* the pathspec pattern sastisfies GFNM_ONESTAR */ |
16 | ||
17 | struct pathspec { | |
b3920bbd | 18 | const char **_raw; /* get_pathspec() result, not freed by free_pathspec() */ |
64acde94 NTND |
19 | int nr; |
20 | unsigned int has_wildcard:1; | |
21 | unsigned int recursive:1; | |
87323bda | 22 | unsigned magic; |
64acde94 NTND |
23 | int max_depth; |
24 | struct pathspec_item { | |
25 | const char *match; | |
d2ce1331 | 26 | const char *original; |
87323bda | 27 | unsigned magic; |
645a29c4 | 28 | int len, prefix; |
64acde94 NTND |
29 | int nowildcard_len; |
30 | int flags; | |
31 | } *items; | |
32 | }; | |
33 | ||
8f4f8f45 NTND |
34 | #define GUARD_PATHSPEC(ps, mask) \ |
35 | do { \ | |
36 | if ((ps)->magic & ~(mask)) \ | |
37 | die("BUG:%s:%d: unsupported magic %x", \ | |
38 | __FILE__, __LINE__, (ps)->magic & ~(mask)); \ | |
39 | } while (0) | |
40 | ||
fc12261f NTND |
41 | /* parse_pathspec flags */ |
42 | #define PATHSPEC_PREFER_CWD (1<<0) /* No args means match cwd */ | |
43 | #define PATHSPEC_PREFER_FULL (1<<1) /* No args means match everything */ | |
6330a171 | 44 | #define PATHSPEC_MAXDEPTH_VALID (1<<2) /* max_depth field is valid */ |
b69bb3fc NTND |
45 | /* strip the trailing slash if the given path is a gitlink */ |
46 | #define PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP (1<<3) | |
87450244 NTND |
47 | /* die if a symlink is part of the given path's directory */ |
48 | #define PATHSPEC_SYMLINK_LEADING_PATH (1<<4) | |
49 | /* | |
50 | * This is like a combination of ..LEADING_PATH and .._SLASH_CHEAP | |
51 | * (but not the same): it strips the trailing slash if the given path | |
52 | * is a gitlink but also checks and dies if gitlink is part of the | |
53 | * leading path (i.e. the given path goes beyond a submodule). It's | |
54 | * safer than _SLASH_CHEAP and also more expensive. | |
55 | */ | |
56 | #define PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE (1<<5) | |
dad2586a | 57 | #define PATHSPEC_PREFIX_ORIGIN (1<<6) |
931eab64 | 58 | #define PATHSPEC_KEEP_ORDER (1<<7) |
fc12261f | 59 | |
87323bda NTND |
60 | extern void parse_pathspec(struct pathspec *pathspec, |
61 | unsigned magic_mask, | |
62 | unsigned flags, | |
63 | const char *prefix, | |
64 | const char **args); | |
e4d92cdc | 65 | extern void copy_pathspec(struct pathspec *dst, const struct pathspec *src); |
64acde94 NTND |
66 | extern void free_pathspec(struct pathspec *); |
67 | ||
84b8b5d1 NTND |
68 | extern char *find_pathspecs_matching_against_index(const struct pathspec *pathspec); |
69 | extern void add_pathspec_matches_against_index(const struct pathspec *pathspec, char *seen); | |
9d67b61f | 70 | extern const char *check_path_for_gitlink(const char *path); |
512aaf94 | 71 | extern void die_if_path_beyond_symlink(const char *path, const char *prefix); |
6f525e71 AS |
72 | |
73 | #endif /* PATHSPEC_H */ |