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 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) 25 26struct atom_value; 27 28struct ref_sorting { 29struct ref_sorting *next; 30int atom;/* index into used_atom array (internal) */ 31unsigned reverse :1, 32 ignore_case :1, 33 version :1; 34}; 35 36struct ref_array_item { 37unsigned char objectname[20]; 38int flag; 39unsigned int kind; 40const char*symref; 41struct commit *commit; 42struct atom_value *value; 43char refname[FLEX_ARRAY]; 44}; 45 46struct ref_array { 47int nr, alloc; 48struct ref_array_item **items; 49struct rev_info *revs; 50}; 51 52struct ref_filter { 53const char**name_patterns; 54struct sha1_array points_at; 55struct commit_list *with_commit; 56 57enum{ 58 REF_FILTER_MERGED_NONE =0, 59 REF_FILTER_MERGED_INCLUDE, 60 REF_FILTER_MERGED_OMIT 61} merge; 62struct commit *merge_commit; 63 64unsigned int with_commit_tag_algo :1, 65 match_as_path :1, 66 ignore_case :1, 67 detached :1; 68unsigned int kind, 69 lines; 70int abbrev, 71 verbose; 72}; 73 74/* Macros for checking --merged and --no-merged options */ 75#define _OPT_MERGED_NO_MERGED(option, filter, h) \ 76 { OPTION_CALLBACK, 0, option, (filter), N_("commit"), (h), \ 77 PARSE_OPT_LASTARG_DEFAULT | PARSE_OPT_NONEG, \ 78 parse_opt_merge_filter, (intptr_t)"HEAD" \ 79 } 80#define OPT_MERGED(f, h) _OPT_MERGED_NO_MERGED("merged", f, h) 81#define OPT_NO_MERGED(f, h) _OPT_MERGED_NO_MERGED("no-merged", f, h) 82 83/* 84 * API for filtering a set of refs. Based on the type of refs the user 85 * has requested, we iterate through those refs and apply filters 86 * as per the given ref_filter structure and finally store the 87 * filtered refs in the ref_array structure. 88 */ 89intfilter_refs(struct ref_array *array,struct ref_filter *filter,unsigned int type); 90/* Clear all memory allocated to ref_array */ 91voidref_array_clear(struct ref_array *array); 92/* Parse format string and sort specifiers */ 93intparse_ref_filter_atom(const char*atom,const char*ep); 94/* Used to verify if the given format is correct and to parse out the used atoms */ 95intverify_ref_format(const char*format); 96/* Sort the given ref_array as per the ref_sorting provided */ 97voidref_array_sort(struct ref_sorting *sort,struct ref_array *array); 98/* Based on the given format and quote_style, fill the strbuf */ 99voidformat_ref_array_item(struct ref_array_item *info,const char*format, 100int quote_style,struct strbuf *final_buf); 101/* Print the ref using the given format and quote_style */ 102voidshow_ref_array_item(struct ref_array_item *info,const char*format,int quote_style); 103/* Callback function for parsing the sort option */ 104intparse_opt_ref_sorting(const struct option *opt,const char*arg,int unset); 105/* Default sort option based on refname */ 106struct ref_sorting *ref_default_sorting(void); 107/* Function to parse --merged and --no-merged options */ 108intparse_opt_merge_filter(const struct option *opt,const char*arg,int unset); 109/* Get the current HEAD's description */ 110char*get_head_description(void); 111/* Set up translated strings in the output. */ 112voidsetup_ref_filter_porcelain_msg(void); 113 114/* 115 * Print a single ref, outside of any ref-filter. Note that the 116 * name must be a fully qualified refname. 117 */ 118voidpretty_print_ref(const char*name,const unsigned char*sha1, 119const char*format); 120 121#endif/* REF_FILTER_H */