summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2021-04-07 23:54:09 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-04-07 23:54:09 (GMT)
commit58840e62a4c3fda3ec6c9ed4b34795aaafb73afc (patch)
treebc834238437acf9e48dd42cb1ee3725106a8160e
parent68e15e0c231bfa50e254fc87d054649161a7e301 (diff)
parent540cdc11adf0574a9a2d52fc687a84a2f4a93ad8 (diff)
downloadgit-58840e62a4c3fda3ec6c9ed4b34795aaafb73afc.zip
git-58840e62a4c3fda3ec6c9ed4b34795aaafb73afc.tar.gz
git-58840e62a4c3fda3ec6c9ed4b34795aaafb73afc.tar.bz2
Merge branch 'ps/pack-bitmap-optim'
Optimize "rev-list --use-bitmap-index --objects" corner case that uses negative tags as the stopping points. * ps/pack-bitmap-optim: pack-bitmap: avoid traversal of objects referenced by uninteresting tag
-rw-r--r--pack-bitmap.c1
-rwxr-xr-xt/perf/p5310-pack-bitmaps.sh14
2 files changed, 15 insertions, 0 deletions
diff --git a/pack-bitmap.c b/pack-bitmap.c
index 1ebe0c8..b4513f8 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -997,6 +997,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
object_list_insert(object, &wants);
object = parse_object_or_die(get_tagged_oid(tag), NULL);
+ object->flags |= (tag->object.flags & UNINTERESTING);
}
if (object->flags & UNINTERESTING)
diff --git a/t/perf/p5310-pack-bitmaps.sh b/t/perf/p5310-pack-bitmaps.sh
index b3e725f..452be01 100755
--- a/t/perf/p5310-pack-bitmaps.sh
+++ b/t/perf/p5310-pack-bitmaps.sh
@@ -15,6 +15,12 @@ test_expect_success 'setup bitmap config' '
git config pack.writebitmaps true
'
+# we need to create the tag up front such that it is covered by the repack and
+# thus by generated bitmaps.
+test_expect_success 'create tags' '
+ git tag --message="tag pointing to HEAD" perf-tag HEAD
+'
+
test_perf 'repack to disk' '
git repack -ad
'
@@ -43,6 +49,14 @@ test_perf 'rev-list (objects)' '
git rev-list --all --use-bitmap-index --objects >/dev/null
'
+test_perf 'rev-list with tag negated via --not --all (objects)' '
+ git rev-list perf-tag --not --all --use-bitmap-index --objects >/dev/null
+'
+
+test_perf 'rev-list with negative tag (objects)' '
+ git rev-list HEAD --not perf-tag --use-bitmap-index --objects >/dev/null
+'
+
test_perf 'rev-list count with blob:none' '
git rev-list --use-bitmap-index --count --objects --all \
--filter=blob:none >/dev/null