1#ifndef LIST_OBJECTS_FILTER_OPTIONS_H 2#define LIST_OBJECTS_FILTER_OPTIONS_H 3 4#include"parse-options.h" 5#include"strbuf.h" 6 7/* 8 * The list of defined filters for list-objects. 9 */ 10enum list_objects_filter_choice { 11 LOFC_DISABLED =0, 12 LOFC_BLOB_NONE, 13 LOFC_BLOB_LIMIT, 14 LOFC_TREE_DEPTH, 15 LOFC_SPARSE_OID, 16 LOFC_COMBINE, 17 LOFC__COUNT /* must be last */ 18}; 19 20struct list_objects_filter_options { 21/* 22 * 'filter_spec' is the raw argument value given on the command line 23 * or protocol request. (The part after the "--keyword=".) For 24 * commands that launch filtering sub-processes, or for communication 25 * over the network, don't use this value; use the result of 26 * expand_list_objects_filter_spec() instead. 27 */ 28char*filter_spec; 29 30/* 31 * 'choice' is determined by parsing the filter-spec. This indicates 32 * the filtering algorithm to use. 33 */ 34enum list_objects_filter_choice choice; 35 36/* 37 * Choice is LOFC_DISABLED because "--no-filter" was requested. 38 */ 39unsigned int no_filter :1; 40 41/* 42 * BEGIN choice-specific parsed values from within the filter-spec. Only 43 * some values will be defined for any given choice. 44 */ 45 46struct object_id *sparse_oid_value; 47unsigned long blob_limit_value; 48unsigned long tree_exclude_depth; 49 50/* LOFC_COMBINE values */ 51 52/* This array contains all the subfilters which this filter combines. */ 53size_t sub_nr, sub_alloc; 54struct list_objects_filter_options *sub; 55 56/* 57 * END choice-specific parsed values. 58 */ 59}; 60 61/* Normalized command line arguments */ 62#define CL_ARG__FILTER"filter" 63 64intparse_list_objects_filter( 65struct list_objects_filter_options *filter_options, 66const char*arg); 67 68intopt_parse_list_objects_filter(const struct option *opt, 69const char*arg,int unset); 70 71#define OPT_PARSE_LIST_OBJECTS_FILTER(fo) \ 72 { OPTION_CALLBACK, 0, CL_ARG__FILTER, fo, N_("args"), \ 73 N_("object filtering"), 0, \ 74 opt_parse_list_objects_filter } 75 76/* 77 * Translates abbreviated numbers in the filter's filter_spec into their 78 * fully-expanded forms (e.g., "limit:blob=1k" becomes "limit:blob=1024"). 79 * 80 * This form should be used instead of the raw filter_spec field when 81 * communicating with a remote process or subprocess. 82 */ 83voidexpand_list_objects_filter_spec( 84const struct list_objects_filter_options *filter, 85struct strbuf *expanded_spec); 86 87voidlist_objects_filter_release( 88struct list_objects_filter_options *filter_options); 89 90staticinlinevoidlist_objects_filter_set_no_filter( 91struct list_objects_filter_options *filter_options) 92{ 93list_objects_filter_release(filter_options); 94 filter_options->no_filter =1; 95} 96 97voidpartial_clone_register( 98const char*remote, 99const struct list_objects_filter_options *filter_options); 100voidpartial_clone_get_default_filter_spec( 101struct list_objects_filter_options *filter_options); 102 103#endif/* LIST_OBJECTS_FILTER_OPTIONS_H */