summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Hostetler <jeffhost@microsoft.com>2017-12-05 16:50:13 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-12-05 17:44:36 (GMT)
commit4875c9791e787af07992d3ba30061885322b7d11 (patch)
tree0f8136c4e7c50d7120dc9548af8d5fa755777735
parent1dde5fa2b254663b3944053c67e45a1903682a80 (diff)
downloadgit-4875c9791e787af07992d3ba30061885322b7d11.zip
git-4875c9791e787af07992d3ba30061885322b7d11.tar.gz
git-4875c9791e787af07992d3ba30061885322b7d11.tar.bz2
list-objects-filter-options: support --no-filter
Teach opt_parse_list_objects_filter() to take --no-filter option and to free the contents of struct filter_options. This command line argument will be automatically inherited by commands using OPT_PARSE_LIST_OBJECTS_FILTER(); this includes pack-objects. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--Documentation/git-pack-objects.txt3
-rw-r--r--list-objects-filter-options.c15
-rw-r--r--list-objects-filter-options.h5
3 files changed, 20 insertions, 3 deletions
diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt
index b924c6c..aa403d0 100644
--- a/Documentation/git-pack-objects.txt
+++ b/Documentation/git-pack-objects.txt
@@ -242,6 +242,9 @@ So does `git bundle` (see linkgit:git-bundle[1]) when it creates a bundle.
the resulting packfile. See linkgit:git-rev-list[1] for valid
`<filter-spec>` forms.
+--no-filter::
+ Turns off any previous `--filter=` argument.
+
--missing=<missing-action>::
A debug option to help with future "partial clone" development.
This option specifies how missing objects are handled.
diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c
index 52bdec7..4c5b34e 100644
--- a/list-objects-filter-options.c
+++ b/list-objects-filter-options.c
@@ -74,8 +74,19 @@ int opt_parse_list_objects_filter(const struct option *opt,
{
struct list_objects_filter_options *filter_options = opt->value;
- assert(arg);
- assert(!unset);
+ if (unset || !arg) {
+ list_objects_filter_release(filter_options);
+ return 0;
+ }
return parse_list_objects_filter(filter_options, arg);
}
+
+void list_objects_filter_release(
+ struct list_objects_filter_options *filter_options)
+{
+ free(filter_options->filter_spec);
+ free(filter_options->sparse_oid_value);
+ free(filter_options->sparse_path_value);
+ memset(filter_options, 0, sizeof(*filter_options));
+}
diff --git a/list-objects-filter-options.h b/list-objects-filter-options.h
index dd7e5db..eea44a1 100644
--- a/list-objects-filter-options.h
+++ b/list-objects-filter-options.h
@@ -52,7 +52,10 @@ int opt_parse_list_objects_filter(const struct option *opt,
#define OPT_PARSE_LIST_OBJECTS_FILTER(fo) \
{ OPTION_CALLBACK, 0, CL_ARG__FILTER, fo, N_("args"), \
- N_("object filtering"), PARSE_OPT_NONEG, \
+ N_("object filtering"), 0, \
opt_parse_list_objects_filter }
+void list_objects_filter_release(
+ struct list_objects_filter_options *filter_options);
+
#endif /* LIST_OBJECTS_FILTER_OPTIONS_H */