From: Jeff Hostetler <jeffhost@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx> --- Documentation/git-pack-objects.txt | 3 +++ list-objects-filter-options.c | 15 +++++++++++++-- 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 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 */ -- 2.9.3