summaryrefslogtreecommitdiff
path: root/revision.c
diff options
context:
space:
mode:
authorDerrick Stolee <derrickstolee@github.com>2022-03-09 16:01:40 (GMT)
committerJunio C Hamano <gitster@pobox.com>2022-03-09 18:25:27 (GMT)
commitc4ea513f4aea64e1ab03309dddff046852bddb74 (patch)
treeb95aa560c455461afa0521a8fb8452413ad143e2 /revision.c
parent105c6f14ad34b417c1e78bc9a8704dcda7b059f2 (diff)
downloadgit-c4ea513f4aea64e1ab03309dddff046852bddb74.zip
git-c4ea513f4aea64e1ab03309dddff046852bddb74.tar.gz
git-c4ea513f4aea64e1ab03309dddff046852bddb74.tar.bz2
rev-list: move --filter parsing into revision.c
Now that 'struct rev_info' has a 'filter' member and most consumers of object filtering are using that member instead of an external struct, move the parsing of the '--filter' option out of builtin/rev-list.c and into revision.c. This use within handle_revision_pseudo_opt() allows us to find the option within setup_revisions() if the arguments are passed directly. In the case of a command such as 'git blame', the arguments are first scanned and checked with parse_revision_opt(), which complains about the option, so 'git blame --filter=blob:none <file>' does not become valid with this change. Some commands, such as 'git diff' gain this option without having it make an effect. And 'git diff --objects' was already possible, but does not actually make sense in that builtin. The key addition that is coming is 'git bundle create --filter=<X>' so we can create bundles containing promisor packs. More work is required to make them fully functional, but that will follow. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'revision.c')
-rw-r--r--revision.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/revision.c b/revision.c
index 4c55c55..58b8717 100644
--- a/revision.c
+++ b/revision.c
@@ -32,6 +32,7 @@
#include "utf8.h"
#include "bloom.h"
#include "json-writer.h"
+#include "list-objects-filter-options.h"
volatile show_early_output_fn_t show_early_output;
@@ -2690,6 +2691,10 @@ static int handle_revision_pseudo_opt(struct rev_info *revs,
revs->no_walk = 0;
} else if (!strcmp(arg, "--single-worktree")) {
revs->single_worktree = 1;
+ } else if (skip_prefix(arg, ("--" CL_ARG__FILTER "="), &arg)) {
+ parse_list_objects_filter(&revs->filter, arg);
+ } else if (!strcmp(arg, ("--no-" CL_ARG__FILTER))) {
+ list_objects_filter_set_no_filter(&revs->filter);
} else {
return 0;
}
@@ -2894,6 +2899,8 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
die("cannot combine --walk-reflogs with history-limiting options");
if (revs->rewrite_parents && revs->children.name)
die(_("options '%s' and '%s' cannot be used together"), "--parents", "--children");
+ if (revs->filter.choice && !revs->blob_objects)
+ die(_("object filtering requires --objects"));
/*
* Limitations on the graph functionality