git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
ac38ffcbe86857b78f7c3b0058ce1d641382446e blob 4117 bytes (raw)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
 
#ifndef LIST_OBJECTS_FILTER_OPTIONS_H
#define LIST_OBJECTS_FILTER_OPTIONS_H

#include "parse-options.h"
#include "string-list.h"

/*
 * The list of defined filters for list-objects.
 */
enum list_objects_filter_choice {
	LOFC_DISABLED = 0,
	LOFC_BLOB_NONE,
	LOFC_BLOB_LIMIT,
	LOFC_TREE_DEPTH,
	LOFC_SPARSE_OID,
	LOFC_COMBINE,
	LOFC__COUNT /* must be last */
};

struct list_objects_filter_options {
	/*
	 * 'filter_spec' is the raw argument value given on the command line
	 * or protocol request.  (The part after the "--keyword=".)  For
	 * commands that launch filtering sub-processes, or for communication
	 * over the network, don't use this value; use the result of
	 * expand_list_objects_filter_spec() instead.
	 * To get the raw filter spec given by the user, use the result of
	 * list_objects_filter_spec().
	 */
	struct string_list filter_spec;

	/*
	 * 'choice' is determined by parsing the filter-spec.  This indicates
	 * the filtering algorithm to use.
	 */
	enum list_objects_filter_choice choice;

	/*
	 * Choice is LOFC_DISABLED because "--no-filter" was requested.
	 */
	unsigned int no_filter : 1;

	/*
	 * BEGIN choice-specific parsed values from within the filter-spec. Only
	 * some values will be defined for any given choice.
	 */

	char *sparse_oid_name;
	unsigned long blob_limit_value;
	unsigned long tree_exclude_depth;

	/* LOFC_COMBINE values */

	/* This array contains all the subfilters which this filter combines. */
	size_t sub_nr, sub_alloc;
	struct list_objects_filter_options *sub;

	/*
	 * END choice-specific parsed values.
	 */
};

/* Normalized command line arguments */
#define CL_ARG__FILTER "filter"
#define CL_ARG__PARTIAL "partial"

void list_objects_filter_die_if_populated(
	struct list_objects_filter_options *filter_options);

/*
 * Parses the filter spec string given by arg and either (1) simply places the
 * result in filter_options if it is not yet populated or (2) combines it with
 * the filter already in filter_options if it is already populated. In the case
 * of (2), the filter specs are combined as if specified with 'combine:'.
 *
 * Dies and prints a user-facing message if an error occurs.
 */
void parse_list_objects_filter(
	struct list_objects_filter_options *filter_options,
	const char *arg);

int opt_parse_list_objects_filter(const struct option *opt,
				  const char *arg, int unset);
int opt_set_blob_none_filter(const struct option *opt,
			     const char *arg, int unset);

#define OPT_PARSE_LIST_OBJECTS_FILTER(fo) \
	{ OPTION_CALLBACK, 0, CL_ARG__FILTER, fo, N_("args"), \
	  N_("object filtering"), 0, \
	  opt_parse_list_objects_filter }, \
	{ OPTION_CALLBACK, 0, CL_ARG__PARTIAL, fo, N_("size"), \
	  N_("partial clone with blob filter"), \
	  PARSE_OPT_OPTARG | PARSE_OPT_NONEG , opt_set_blob_none_filter }

/*
 * Translates abbreviated numbers in the filter's filter_spec into their
 * fully-expanded forms (e.g., "limit:blob=1k" becomes "limit:blob=1024").
 * Returns a string owned by the list_objects_filter_options object.
 *
 * This form should be used instead of the raw list_objects_filter_spec()
 * value when communicating with a remote process or subprocess.
 */
const char *expand_list_objects_filter_spec(
	struct list_objects_filter_options *filter);

/*
 * Returns the filter spec string more or less in the form as the user
 * entered it. This form of the filter_spec can be used in user-facing
 * messages.  Returns a string owned by the list_objects_filter_options
 * object.
 */
const char *list_objects_filter_spec(
	struct list_objects_filter_options *filter);

void list_objects_filter_release(
	struct list_objects_filter_options *filter_options);

static inline void list_objects_filter_set_no_filter(
	struct list_objects_filter_options *filter_options)
{
	list_objects_filter_release(filter_options);
	filter_options->no_filter = 1;
}

void partial_clone_register(
	const char *remote,
	struct list_objects_filter_options *filter_options);
void partial_clone_get_default_filter_spec(
	struct list_objects_filter_options *filter_options,
	const char *remote);

#endif /* LIST_OBJECTS_FILTER_OPTIONS_H */
debug log:

solving ac38ffcbe86 ...
found ac38ffcbe86 in https://public-inbox.org/git/6f340d9aadf71d394ad320ad162f1d140b632f2c.1586791560.git.gitgitgadget@gmail.com/ ||
	https://public-inbox.org/git/6f340d9aadf71d394ad320ad162f1d140b632f2c.1584638887.git.gitgitgadget@gmail.com/
found 2ffb39222c4 in git.git.git
preparing index
index prepared:
100644 2ffb39222c49745f68134fe6e360ba8cc00f15cc	list-objects-filter-options.h

applying [1/2] https://public-inbox.org/git/6f340d9aadf71d394ad320ad162f1d140b632f2c.1586791560.git.gitgitgadget@gmail.com/
diff --git a/list-objects-filter-options.h b/list-objects-filter-options.h
index 2ffb39222c4..ac38ffcbe86 100644

Checking patch list-objects-filter-options.h...
Applied patch list-objects-filter-options.h cleanly.

skipping https://public-inbox.org/git/6f340d9aadf71d394ad320ad162f1d140b632f2c.1584638887.git.gitgitgadget@gmail.com/ for ac38ffcbe86
index at:
100644 ac38ffcbe86857b78f7c3b0058ce1d641382446e	list-objects-filter-options.h

Code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).