summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-06-27 09:56:24 -0700
committerJunio C Hamano <gitster@pobox.com>2016-06-27 09:56:24 -0700
commitdf5a925523e627cd20ce11f570d418dfae2ac7d8 (patch)
tree58760aa7f4f5bf9e05223aa9a73728f3892b5b5c
parentfbb4138cb2e6b77d1d8386f336e7813fcfd3cb02 (diff)
parentfb85db84dcc36dcc3cdd5fc744280334bbe8eb47 (diff)
downloadgit-df5a925523e627cd20ce11f570d418dfae2ac7d8.tar.gz
Merge branch 'jk/rev-list-count-with-bitmap' into maint
"git rev-list --count" whose walk-length is limited with "-n" option did not work well with the counting optimized to look at the bitmap index. * jk/rev-list-count-with-bitmap: rev-list: disable bitmaps when "-n" is used with listing objects rev-list: "adjust" results of "--count --use-bitmap-index -n"
-rw-r--r--builtin/rev-list.c6
-rwxr-xr-xt/t5310-pack-bitmaps.sh6
2 files changed, 11 insertions, 1 deletions
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 275da0d647..b82bcc3436 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -358,12 +358,16 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
if (use_bitmap_index && !revs.prune) {
if (revs.count && !revs.left_right && !revs.cherry_mark) {
uint32_t commit_count;
+ int max_count = revs.max_count;
if (!prepare_bitmap_walk(&revs)) {
count_bitmap_commit_list(&commit_count, NULL, NULL, NULL);
+ if (max_count >= 0 && max_count < commit_count)
+ commit_count = max_count;
printf("%d\n", commit_count);
return 0;
}
- } else if (revs.tag_objects && revs.tree_objects && revs.blob_objects) {
+ } else if (revs.max_count < 0 &&
+ revs.tag_objects && revs.tree_objects && revs.blob_objects) {
if (!prepare_bitmap_walk(&revs)) {
traverse_bitmap_commit_list(&show_object_fast);
return 0;
diff --git a/t/t5310-pack-bitmaps.sh b/t/t5310-pack-bitmaps.sh
index d446706e94..3893afd687 100755
--- a/t/t5310-pack-bitmaps.sh
+++ b/t/t5310-pack-bitmaps.sh
@@ -47,6 +47,12 @@ rev_list_tests() {
test_cmp expect actual
'
+ test_expect_success "counting commits with limit ($state)" '
+ git rev-list --count -n 1 HEAD >expect &&
+ git rev-list --use-bitmap-index --count -n 1 HEAD >actual &&
+ test_cmp expect actual
+ '
+
test_expect_success "counting non-linear history ($state)" '
git rev-list --count other...master >expect &&
git rev-list --use-bitmap-index --count other...master >actual &&