git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/3] revision: complicated pathspecs disable filters

From
Taylor Blau <me@ttaylorr.com>
Date
Apr 13, 2020, 00:07 UTC
Message-ID
<20200413000748.GA55122@syl.local>
In-Reply-To
<xmqqa73gcp74.fsf@gitster.c.googlers.com>
On Sun, Apr 12, 2020 at 03:30:07PM -0700, Junio C Hamano wrote:
Show 21 quoted lines
> Taylor Blau <me@ttaylorr.com> writes:
>
> > I certainly wouldn't complain about a comment here explaining these
> > three checks, but I suppose that the rationale is only a 'git blame'
> > away (and I guess that is faster now after this series ;-)).
> >
> >> +	if (revs->prune_data.has_wildcard)
> >> +		return;
> >> +	if (revs->prune_data.nr > 1)
> >> +		return;
> >> +	if (revs->prune_data.magic ||
> >> +	    (revs->prune_data.nr &&
> >> +	     revs->prune_data.items[0].magic))
>
> This says "any magic", but it is overly pessimistic to disable the
> optimization for "literal" magic.  That magic is the one that lets
> well written scripts to say "I have in a '$variable' that the user
> gave me as a pathname (not pathspec), and it may have a wildcard
> letter in it, but please treat it as a literal string" by prefixing
> ":(literal)" before that user-supplied data, so it is punishing well
> disciplined folks.

I hadn't thought of that, but it makes sense to me. How about something like this squashed into this patch? I moved the if-chain that Stolee introduced out to its own function, at least since they seem well-contained and related to one another. I figure that this simplifies the implementation of 'prepare_to_use_bloom_filter' by giving the reader less to think about up-front.

diff --git a/revision.c b/revision.c
index 534c0bf996..15bf4ccff5 100644
--- a/revision.c
+++ b/revision.c
@@ -654,6 +654,18 @@ static void trace2_bloom_filter_statistics_atexit(void)
        jw_release(&jw);
 }

+static int has_bloom_key(struct pathspec *spec)
+{
+       if (spec->has_wildcard)
+               return 0;
+       if (spec->nr > 1)
+               return 0;
+       if ((spec->magic & ~PATHSPEC_LITERAL) ||
+           (spec->nr && spec->items[0].magic & ~PATHSPEC_LITERAL))
+               return 0;
+       return 1;
+}
+
 static void prepare_to_use_bloom_filter(struct rev_info *revs)
 {
        struct pathspec_item *pi;
@@ -665,13 +677,7 @@ static void prepare_to_use_bloom_filter(struct rev_info *revs)
        if (!revs->commits)
            return;

-       if (revs->prune_data.has_wildcard)
-               return;
-       if (revs->prune_data.nr > 1)
-               return;
-       if (revs->prune_data.magic ||
-           (revs->prune_data.nr &&
-            revs->prune_data.items[0].magic))
+       if (!has_bloom_key(&revs->prune_data))
                return;

        repo_parse_commit(revs->repo, revs->commits->item);

> >> +		return;
> >> +
> >>  	repo_parse_commit(revs->repo, revs->commits->item);
> >>
> >>  	if (!revs->repo->objects->commit_graph)
> >> --
> >> gitgitgadget
> >
> >   Reviewed-by: Taylor Blau <me@ttaylorr.com>
> >
> > Thanks,
> > Taylor

Thanks,
Taylor
Previous: Junio C HamanoNext: Derrick Stolee
Message 19 of 48 in “Integrate changed-path Bloom filters with 'git blame'”
  1. 0/3 Integrate changed-path Bloom filters with 'git blame'Derrick Stolee via GitGitGadget, Apr 11, 2020
  2. 1/3 revision: complicated pathspecs disable filtersDerrick Stolee via GitGitGadget, Apr 11, 2020
  3. Junio C HamanoApr 11, 2020
  4. Derrick StoleeApr 13, 2020
  5. Junio C HamanoApr 14, 2020
  6. Derrick StoleeApr 15, 2020
  7. Derrick StoleeApr 15, 2020
  8. Junio C HamanoApr 15, 2020
  9. Junio C HamanoApr 15, 2020
  10. Junio C HamanoApr 15, 2020
  11. Taylor BlauApr 16, 2020
  12. Jakub NarębskiApr 15, 2020
  13. Taylor BlauApr 16, 2020
  14. Derrick StoleeApr 16, 2020
  15. Taylor BlauApr 16, 2020
  16. Junio C HamanoApr 16, 2020
  17. Taylor BlauApr 12, 2020
  18. Junio C HamanoApr 12, 2020
  19. Taylor BlauApr 13, 2020
  20. Derrick StoleeApr 13, 2020
  21. 2/3 commit: write commit-graph with bloom filtersDerrick Stolee via GitGitGadget, Apr 11, 2020
  22. Junio C HamanoApr 11, 2020
  23. Taylor BlauApr 12, 2020
  24. Derrick StoleeApr 13, 2020
  25. Junio C HamanoApr 13, 2020
  26. 3/3 blame: use changed-path Bloom filtersDerrick Stolee via GitGitGadget, Apr 11, 2020
  27. Junio C HamanoApr 11, 2020
  28. Eric SunshineApr 12, 2020
  29. Junio C HamanoApr 11, 2020
  30. 0/4 Integrate changed-path Bloom filters with 'git blame'Derrick Stolee via GitGitGadget, Apr 13, 2020
  31. 1/4 revision: complicated pathspecs disable filtersDerrick Stolee via GitGitGadget, Apr 13, 2020
  32. Taylor BlauApr 13, 2020
  33. Junio C HamanoApr 13, 2020
  34. 2/4 commit: write commit-graph with Bloom filtersDerrick Stolee via GitGitGadget, Apr 13, 2020
  35. Taylor BlauApr 13, 2020
  36. Junio C HamanoApr 13, 2020
  37. Derrick StoleeApr 14, 2020
  38. Junio C HamanoApr 14, 2020
  39. Derrick StoleeApr 14, 2020
  40. Taylor BlauApr 15, 2020
  41. 3/4 commit-graph: write commit-graph in more testsDerrick Stolee via GitGitGadget, Apr 13, 2020
  42. 4/4 blame: use changed-path Bloom filtersDerrick Stolee via GitGitGadget, Apr 13, 2020
  43. Taylor BlauApr 13, 2020
  44. 0/3 Integrate changed-path Bloom filters with 'git blame'Derrick Stolee via GitGitGadget, Apr 16, 2020
  45. 1/3 revision: complicated pathspecs disable filtersDerrick Stolee via GitGitGadget, Apr 16, 2020
  46. SZEDER GáborJun 7, 2020
  47. 2/3 tests: write commit-graph with Bloom filtersDerrick Stolee via GitGitGadget, Apr 16, 2020
  48. 3/3 blame: use changed-path Bloom filtersDerrick Stolee via GitGitGadget, Apr 16, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.