]> git.ipfire.org Git - thirdparty/git.git/commitdiff
revision: allow setting custom limiter function
authorVicent Marti <tanoku@gmail.com>
Thu, 24 Oct 2013 18:01:41 +0000 (14:01 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 24 Oct 2013 22:44:52 +0000 (15:44 -0700)
This commit enables users of `struct rev_info` to peform custom limiting
during a revision walk (i.e. `get_revision`).

If the field `include_check` has been set to a callback, this callback
will be issued once for each commit before it is added to the "pending"
list of the revwalk. If the include check returns 0, the commit will be
marked as added but won't be pushed to the pending list, effectively
limiting the walk.

Signed-off-by: Vicent Marti <tanoku@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
revision.c
revision.h

index 0173e0148b850bd1a3e2e7e5c652050ade6d5ba4..cddd6051e307cf5455e41cdd404008d5a1967f84 100644 (file)
@@ -779,6 +779,10 @@ static int add_parents_to_list(struct rev_info *revs, struct commit *commit,
                return 0;
        commit->object.flags |= ADDED;
 
+       if (revs->include_check &&
+           !revs->include_check(commit, revs->include_check_data))
+               return 0;
+
        /*
         * If the commit is uninteresting, don't try to
         * prune parents - we want the maximal uninteresting
index e7f1d211bf0a203978a3024bcbae5c98f25c60cf..9957f3c6e5b123480d2276e7de5206c3a5b697db 100644 (file)
@@ -168,6 +168,8 @@ struct rev_info {
        unsigned long min_age;
        int min_parents;
        int max_parents;
+       int (*include_check)(struct commit *, void *);
+       void *include_check_data;
 
        /* diff info for patches and for paths limiting */
        struct diff_options diffopt;