]>
Commit | Line | Data |
---|---|---|
69b1cf91 KN |
1 | #ifndef REF_FILTER_H |
2 | #define REF_FILTER_H | |
3 | ||
4 | #include "sha1-array.h" | |
5 | #include "refs.h" | |
6 | #include "commit.h" | |
7 | #include "parse-options.h" | |
8 | ||
9 | /* Quoting styles */ | |
10 | #define QUOTE_NONE 0 | |
11 | #define QUOTE_SHELL 1 | |
12 | #define QUOTE_PERL 2 | |
13 | #define QUOTE_PYTHON 4 | |
14 | #define QUOTE_TCL 8 | |
15 | ||
5b4f2851 KN |
16 | #define FILTER_REFS_INCLUDE_BROKEN 0x0001 |
17 | #define FILTER_REFS_TAGS 0x0002 | |
18 | #define FILTER_REFS_BRANCHES 0x0004 | |
19 | #define FILTER_REFS_REMOTES 0x0008 | |
20 | #define FILTER_REFS_OTHERS 0x0010 | |
21 | #define FILTER_REFS_ALL (FILTER_REFS_TAGS | FILTER_REFS_BRANCHES | \ | |
22 | FILTER_REFS_REMOTES | FILTER_REFS_OTHERS) | |
23 | #define FILTER_REFS_DETACHED_HEAD 0x0020 | |
24 | #define FILTER_REFS_KIND_MASK (FILTER_REFS_ALL | FILTER_REFS_DETACHED_HEAD) | |
14de7fba | 25 | |
3a25761a | 26 | struct atom_value; |
69b1cf91 KN |
27 | |
28 | struct ref_sorting { | |
29 | struct ref_sorting *next; | |
30 | int atom; /* index into used_atom array (internal) */ | |
90c00408 | 31 | unsigned reverse : 1, |
3bb16a8b | 32 | ignore_case : 1, |
90c00408 | 33 | version : 1; |
69b1cf91 KN |
34 | }; |
35 | ||
36 | struct ref_array_item { | |
37 | unsigned char objectname[20]; | |
38 | int flag; | |
5b4f2851 | 39 | unsigned int kind; |
69b1cf91 | 40 | const char *symref; |
35257aa0 | 41 | struct commit *commit; |
69b1cf91 | 42 | struct atom_value *value; |
1958a6eb | 43 | char refname[FLEX_ARRAY]; |
69b1cf91 KN |
44 | }; |
45 | ||
46 | struct ref_array { | |
47 | int nr, alloc; | |
48 | struct ref_array_item **items; | |
1511b22d | 49 | struct rev_info *revs; |
69b1cf91 KN |
50 | }; |
51 | ||
52 | struct ref_filter { | |
53 | const char **name_patterns; | |
68411046 | 54 | struct sha1_array points_at; |
ee2bd06b | 55 | struct commit_list *with_commit; |
35257aa0 KN |
56 | |
57 | enum { | |
58 | REF_FILTER_MERGED_NONE = 0, | |
59 | REF_FILTER_MERGED_INCLUDE, | |
60 | REF_FILTER_MERGED_OMIT | |
61 | } merge; | |
62 | struct commit *merge_commit; | |
ee2bd06b | 63 | |
bef0e12b | 64 | unsigned int with_commit_tag_algo : 1, |
1511b22d | 65 | match_as_path : 1, |
3bb16a8b | 66 | ignore_case : 1, |
1511b22d | 67 | detached : 1; |
1bb38e5a KN |
68 | unsigned int kind, |
69 | lines; | |
1511b22d KN |
70 | int abbrev, |
71 | verbose; | |
69b1cf91 KN |
72 | }; |
73 | ||
74 | struct ref_filter_cbdata { | |
14de7fba KN |
75 | struct ref_array *array; |
76 | struct ref_filter *filter; | |
69b1cf91 KN |
77 | }; |
78 | ||
5afcb905 KN |
79 | /* Macros for checking --merged and --no-merged options */ |
80 | #define _OPT_MERGED_NO_MERGED(option, filter, h) \ | |
81 | { OPTION_CALLBACK, 0, option, (filter), N_("commit"), (h), \ | |
82 | PARSE_OPT_LASTARG_DEFAULT | PARSE_OPT_NONEG, \ | |
83 | parse_opt_merge_filter, (intptr_t) "HEAD" \ | |
84 | } | |
85 | #define OPT_MERGED(f, h) _OPT_MERGED_NO_MERGED("merged", f, h) | |
86 | #define OPT_NO_MERGED(f, h) _OPT_MERGED_NO_MERGED("no-merged", f, h) | |
87 | ||
14de7fba KN |
88 | /* |
89 | * API for filtering a set of refs. Based on the type of refs the user | |
90 | * has requested, we iterate through those refs and apply filters | |
91 | * as per the given ref_filter structure and finally store the | |
92 | * filtered refs in the ref_array structure. | |
93 | */ | |
94 | int filter_refs(struct ref_array *array, struct ref_filter *filter, unsigned int type); | |
69b1cf91 KN |
95 | /* Clear all memory allocated to ref_array */ |
96 | void ref_array_clear(struct ref_array *array); | |
97 | /* Parse format string and sort specifiers */ | |
98 | int parse_ref_filter_atom(const char *atom, const char *ep); | |
99 | /* Used to verify if the given format is correct and to parse out the used atoms */ | |
100 | int verify_ref_format(const char *format); | |
101 | /* Sort the given ref_array as per the ref_sorting provided */ | |
102 | void ref_array_sort(struct ref_sorting *sort, struct ref_array *array); | |
103 | /* Print the ref using the given format and quote_style */ | |
104 | void show_ref_array_item(struct ref_array_item *info, const char *format, int quote_style); | |
105 | /* Callback function for parsing the sort option */ | |
106 | int parse_opt_ref_sorting(const struct option *opt, const char *arg, int unset); | |
107 | /* Default sort option based on refname */ | |
108 | struct ref_sorting *ref_default_sorting(void); | |
5afcb905 KN |
109 | /* Function to parse --merged and --no-merged options */ |
110 | int parse_opt_merge_filter(const struct option *opt, const char *arg, int unset); | |
69b1cf91 | 111 | |
2111aa79 LP |
112 | /* |
113 | * Print a single ref, outside of any ref-filter. Note that the | |
114 | * name must be a fully qualified refname. | |
115 | */ | |
116 | void pretty_print_ref(const char *name, const unsigned char *sha1, | |
117 | const char *format); | |
118 | ||
69b1cf91 | 119 | #endif /* REF_FILTER_H */ |