From: Lidong Yan <yldhome2d2@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, stolee@gmail.com, ttaylorr@github.com
Subject: Re: [PATCH v2] bloom: enable bloom filter with wildcard pathspec in revision traversal
Date: Sat, 9 Aug 2025 10:06:06 +0800 [thread overview]
Message-ID: <B2F0FE14-AA88-490D-989C-3D93BF972DCF@gmail.com> (raw)
In-Reply-To: <xmqqsei1izhs.fsf@gitster.g>
Junio C Hamano <gitster@pobox.com> writes:
>
>> @@ -693,9 +698,22 @@ static int convert_pathspec_to_bloom_keyvec(struct bloom_keyvec **out,
>> size_t len;
>> int res = 0;
>>
>> + len = pi->nowildcard_len;
>> + if (len != pi->len) {
>> + /*
>> + * for path like "/dir/file*", nowildcard part would be
>> + * "/dir/file", but only "/dir" should be used for the
>
> Leading "/" makes it look as if the pathspec element can begin with
> a slash, but it can not, can it?
Yes, seems like if we pass a absolute path "/path/to/repository/dir/file”, git
will automatically move "/path/to/repository” (in setup.c abspath_part_inside_repo())
So I should remove leading slash in my comment.
> Taking what I suggested above, here is a possible improvement.
>
> revision.c | 18 ++++++++----------
> 1 file changed, 8 insertions(+), 10 deletions(-)
>
> diff --git i/revision.c w/revision.c
> index 2a5b98390e..2a92bdda84 100644
> --- i/revision.c
> +++ w/revision.c
> @@ -696,14 +696,14 @@ static int convert_pathspec_to_bloom_keyvec(struct bloom_keyvec **out,
> char *path_alloc = NULL;
> const char *path;
> size_t len;
> - int res = 0;
> + int res = -1; /* be pessimistic */
>
> len = pi->nowildcard_len;
> if (len != pi->len) {
> /*
> - * for path like "/dir/file*", nowildcard part would be
> - * "/dir/file", but only "/dir" should be used for the
> - * bloom filter
> + * for path like "dir/file*", nowildcard part would be
> + * "dir/file", but only "dir" should be used for the
> + * bloom filter.
> */
> while (len > 0 && pi->match[len - 1] != '/')
> len--;
> @@ -712,19 +712,17 @@ static int convert_pathspec_to_bloom_keyvec(struct bloom_keyvec **out,
> if (len > 0 && pi->match[len - 1] == '/')
> len--;
>
> + if (!len)
> + goto cleanup;
> +
> if (len != pi->len) {
> path_alloc = xmemdupz(pi->match, len);
> path = path_alloc;
> } else
> path = pi->match;
>
> - len = strlen(path);
> - if (!len) {
> - res = -1;
> - goto cleanup;
> - }
> -
> *out = bloom_keyvec_new(path, len, settings);
> + res = 0;
>
> cleanup:
> free(path_alloc);
Thanks, I will apply this and add your signed-off.
Lidong
next prev parent reply other threads:[~2025-08-09 2:06 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-07 5:12 [PATCH] bloom: enable bloom filter with wildcard pathspec in revision traversal Lidong Yan
2025-08-07 6:49 ` Patrick Steinhardt
2025-08-07 8:59 ` Lidong Yan
2025-08-07 16:15 ` Junio C Hamano
2025-08-08 6:40 ` Lidong Yan
2025-08-08 6:58 ` [PATCH v2] " Lidong Yan
2025-08-08 15:50 ` Junio C Hamano
2025-08-09 2:06 ` Lidong Yan [this message]
2025-08-09 2:16 ` [PATCH v3] " Lidong Yan
2025-08-09 4:22 ` [PATCH v4] " Lidong Yan
2025-08-09 7:40 ` Lidong Yan
2025-08-11 6:01 ` [PATCH v5] " Lidong Yan
2025-08-11 15:56 ` Junio C Hamano
2025-08-11 16:08 ` Lidong Yan
2025-08-09 23:51 ` [PATCH v3] " Junio C Hamano
2025-08-10 1:57 ` Lidong Yan
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=B2F0FE14-AA88-490D-989C-3D93BF972DCF@gmail.com \
--to=yldhome2d2@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=stolee@gmail.com \
--cc=ttaylorr@github.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 NNTP newsgroup(s).