diff options
author | Derrick Stolee <dstolee@microsoft.com> | 2018-07-20 19:33:25 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-07-21 01:38:56 +0300 |
commit | 1fee1242577ae23b32c33ff1122402bb228f2692 (patch) | |
tree | 3120c581683f0e34652c17ef9d3d8f9cce2541e0 /t/helper/test-reach.c | |
parent | 1792bc125069e3e5b59f0158e259335a07aa7cf5 (diff) |
test-reach: test commit_contains
The commit_contains method has two modes which depend on the given
ref_filter struct. We have the "normal" algorithm (which is also the
typically-slow operation) and the "tag" algorithm. This difference is
essentially what changes performance for 'git branch --contains' versus
'git tag --contains'. There are thoughts that the data shapes used by
these two applications justify the different implementations.
Create tests using 'test-tool reach commit_contains [--tag]' to cover
both methods.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/helper/test-reach.c')
-rw-r--r-- | t/helper/test-reach.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/t/helper/test-reach.c b/t/helper/test-reach.c index c79729cac0..eb21103998 100644 --- a/t/helper/test-reach.c +++ b/t/helper/test-reach.c @@ -4,6 +4,7 @@ #include "commit-reach.h" #include "config.h" #include "parse-options.h" +#include "ref-filter.h" #include "string-list.h" #include "tag.h" @@ -112,6 +113,17 @@ int cmd__reach(int ac, const char **av) print_sorted_commit_ids(list); } else if (!strcmp(av[1], "can_all_from_reach")) { printf("%s(X,Y):%d\n", av[1], can_all_from_reach(X, Y, 1)); + } else if (!strcmp(av[1], "commit_contains")) { + struct ref_filter filter; + struct contains_cache cache; + init_contains_cache(&cache); + + if (ac > 2 && !strcmp(av[2], "--tag")) + filter.with_commit_tag_algo = 1; + else + filter.with_commit_tag_algo = 0; + + printf("%s(_,A,X,_):%d\n", av[1], commit_contains(&filter, A, X, &cache)); } exit(0); |