From: Jeff King <peff@peff.net> To: git@vger.kernel.org Cc: Junio C Hamano <gitster@pobox.com> Subject: [PATCH v2 04/15] pack-bitmap: refuse to do a bitmap traversal with pathspecs Date: Fri, 14 Feb 2020 13:22:16 -0500 [thread overview] Message-ID: <20200214182216.GD150965@coredump.intra.peff.net> (raw) In-Reply-To: <20200214182147.GA654525@coredump.intra.peff.net> rev-list has refused to use bitmaps with pathspec limiting since c8a70d3509 (rev-list: disable --use-bitmap-index when pruning commits, 2015-07-01). But this is true not just for rev-list, but for anyone who calls prepare_bitmap_walk(); the code isn't equipped to handle this case. We never noticed because the only other callers would never pass a pathspec limiter. But let's push the check down into prepare_bitmap_walk() anyway. That's a more logical place for it to live, as callers shouldn't need to know the details (and must be prepared to fall back to a regular traversal anyway, since there might not be bitmaps in the repository). It would also prepare us for a day where this case _is_ handled, but that's pretty unlikely. E.g., we could use bitmaps to generate the set of commits, and then diff each commit to see if it matches the pathspec. That would be slightly faster than a naive traversal that actually walks the commits. But you'd probably do better still to make use of the newer commit-graph feature to make walking the commits very cheap. Signed-off-by: Jeff King <peff@peff.net> --- builtin/rev-list.c | 2 +- pack-bitmap.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/builtin/rev-list.c b/builtin/rev-list.c index bce406bd1e..4cb5a52dee 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -533,7 +533,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) if (show_progress) progress = start_delayed_progress(show_progress, 0); - if (use_bitmap_index && !revs.prune) { + if (use_bitmap_index) { if (revs.count && !revs.left_right && !revs.cherry_mark) { uint32_t commit_count; int max_count = revs.max_count; diff --git a/pack-bitmap.c b/pack-bitmap.c index 6c06099dc7..a97b717e55 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -715,9 +715,19 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs) struct bitmap *wants_bitmap = NULL; struct bitmap *haves_bitmap = NULL; - struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git)); + struct bitmap_index *bitmap_git; + + /* + * We can't do pathspec limiting with bitmaps, because we don't know + * which commits are associated with which object changes (let alone + * even which objects are associated with which paths). + */ + if (revs->prune) + return NULL; + /* try to open a bitmapped pack, but don't parse it yet * because we may not need to use it */ + bitmap_git = xcalloc(1, sizeof(*bitmap_git)); if (open_pack_bitmap(revs->repo, bitmap_git) < 0) goto cleanup; -- 2.25.0.796.gcc29325708
next prev parent reply other threads:[~2020-02-14 18:22 UTC|newest] Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-13 2:15 [PATCH 0/13] combining object filters and bitmaps Jeff King 2020-02-13 2:16 ` [PATCH 01/13] pack-bitmap: factor out type iterator initialization Jeff King 2020-02-13 17:45 ` Junio C Hamano 2020-02-13 2:16 ` [PATCH 02/13] pack-bitmap: fix leak of haves/wants object lists Jeff King 2020-02-13 18:12 ` Junio C Hamano 2020-02-13 2:17 ` [PATCH 03/13] rev-list: fallback to non-bitmap traversal when filtering Jeff King 2020-02-13 18:19 ` Junio C Hamano 2020-02-13 18:40 ` Jeff King 2020-02-13 2:17 ` [PATCH 04/13] rev-list: consolidate bitmap-disabling options Jeff King 2020-02-13 2:18 ` [PATCH 05/13] rev-list: factor out bitmap-optimized routines Jeff King 2020-02-13 18:34 ` Junio C Hamano 2020-02-13 2:19 ` [PATCH 06/13] rev-list: make --count work with --objects Jeff King 2020-02-13 19:14 ` Junio C Hamano 2020-02-13 20:27 ` Jeff King 2020-02-13 2:20 ` [PATCH 07/13] rev-list: allow bitmaps when counting objects Jeff King 2020-02-13 21:47 ` Junio C Hamano 2020-02-13 22:27 ` Jeff King 2020-02-13 2:20 ` [PATCH 08/13] pack-bitmap: basic noop bitmap filter infrastructure Jeff King 2020-02-13 2:21 ` [PATCH 09/13] rev-list: use bitmap filters for traversal Jeff King 2020-02-13 22:22 ` Junio C Hamano 2020-02-13 22:34 ` Jeff King 2020-02-13 2:21 ` [PATCH 10/13] bitmap: add bitmap_unset() function Jeff King 2020-02-13 2:23 ` [PATCH 11/13] pack-bitmap: implement BLOB_NONE filtering Jeff King 2020-02-13 2:25 ` [PATCH 12/13] pack-bitmap: implement BLOB_LIMIT filtering Jeff King 2020-02-13 23:17 ` Junio C Hamano 2020-02-13 2:25 ` [PATCH 13/13] pack-objects: support filters with bitmaps Jeff King 2020-02-14 18:21 ` [PATCH v2 0/15] combining object filters and bitmaps Jeff King 2020-02-14 18:22 ` [PATCH v2 01/15] pack-bitmap: factor out type iterator initialization Jeff King 2020-02-15 0:10 ` Taylor Blau 2020-02-14 18:22 ` [PATCH v2 02/15] pack-bitmap: fix leak of haves/wants object lists Jeff King 2020-02-15 0:15 ` Taylor Blau 2020-02-15 6:46 ` Jeff King 2020-02-18 17:58 ` Derrick Stolee 2020-02-18 20:02 ` Jeff King 2020-02-14 18:22 ` [PATCH v2 03/15] rev-list: fallback to non-bitmap traversal when filtering Jeff King 2020-02-15 0:22 ` Taylor Blau 2020-02-14 18:22 ` Jeff King [this message] 2020-02-14 19:03 ` [PATCH v2 04/15] pack-bitmap: refuse to do a bitmap traversal with pathspecs Junio C Hamano 2020-02-14 20:51 ` Jeff King 2020-02-14 18:22 ` [PATCH v2 05/15] rev-list: factor out bitmap-optimized routines Jeff King 2020-02-15 0:35 ` Taylor Blau 2020-02-14 18:22 ` [PATCH v2 06/15] rev-list: make --count work with --objects Jeff King 2020-02-15 0:42 ` Taylor Blau 2020-02-15 6:48 ` Jeff King 2020-02-16 23:34 ` Junio C Hamano 2020-02-18 5:24 ` Jeff King 2020-02-18 17:28 ` Junio C Hamano 2020-02-18 19:55 ` Jeff King 2020-02-18 21:19 ` Junio C Hamano 2020-02-18 21:23 ` Jeff King 2020-02-18 18:05 ` Derrick Stolee 2020-02-18 19:59 ` Jeff King 2020-02-14 18:22 ` [PATCH v2 07/15] rev-list: allow bitmaps when counting objects Jeff King 2020-02-15 0:45 ` Taylor Blau 2020-02-15 6:55 ` Jeff King 2020-02-16 23:36 ` Junio C Hamano 2020-02-14 18:22 ` [PATCH v2 08/15] t5310: factor out bitmap traversal comparison Jeff King 2020-02-15 2:14 ` Taylor Blau 2020-02-15 7:00 ` Jeff King 2020-02-14 18:22 ` [PATCH v2 09/15] rev-list: allow commit-only bitmap traversals Jeff King 2020-02-18 18:18 ` Derrick Stolee 2020-02-18 20:05 ` Jeff King 2020-02-18 20:11 ` Derrick Stolee 2020-02-14 18:22 ` [PATCH v2 10/15] pack-bitmap: basic noop bitmap filter infrastructure Jeff King 2020-02-14 18:22 ` [PATCH v2 11/15] rev-list: use bitmap filters for traversal Jeff King 2020-02-14 18:22 ` [PATCH v2 12/15] bitmap: add bitmap_unset() function Jeff King 2020-02-14 18:22 ` [PATCH v2 13/15] pack-bitmap: implement BLOB_NONE filtering Jeff King 2020-02-18 19:26 ` Derrick Stolee 2020-02-18 19:36 ` Derrick Stolee 2020-02-18 20:30 ` Jeff King 2020-02-18 20:24 ` Jeff King 2020-02-14 18:22 ` [PATCH v2 14/15] pack-bitmap: implement BLOB_LIMIT filtering Jeff King 2020-02-14 18:22 ` [PATCH v2 15/15] pack-objects: support filters with bitmaps Jeff King
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200214182216.GD150965@coredump.intra.peff.net \ --to=peff@peff.net \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --subject='Re: [PATCH v2 04/15] pack-bitmap: refuse to do a bitmap traversal with pathspecs' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).