diff options
author | Jeff Hostetler <jeffhost@microsoft.com> | 2017-12-05 16:50:13 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-12-05 09:44:36 -0800 |
commit | 4875c9791e787af07992d3ba30061885322b7d11 (patch) | |
tree | 0f8136c4e7c50d7120dc9548af8d5fa755777735 | |
parent | list-objects-filter-options: fix 'keword' typo in comment (diff) | |
download | tgif-4875c9791e787af07992d3ba30061885322b7d11.tar.xz |
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.txt | 3 | ||||
-rw-r--r-- | list-objects-filter-options.c | 15 | ||||
-rw-r--r-- | list-objects-filter-options.h | 5 |
3 files changed, 20 insertions, 3 deletions
diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt index b924c6cbf7..aa403d02f3 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 52bdec75bf..4c5b34e949 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 dd7e5db2db..eea44a1a51 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 */ |