From: Junio C Hamano <gitster@pobox.com>
To: Matthew Hughes <mhughes@uw.co.uk>
Cc: git@vger.kernel.org
Subject: Re: Expected behaviour for pathspecs matching attributes in subdirectories
Date: Fri, 07 Jul 2023 10:23:56 -0700 [thread overview]
Message-ID: <xmqq1qhjbpoz.fsf@gitster.g> (raw)
In-Reply-To: <CAEzX-aCnp0avSbMdyFQz=3s4-hjdeVwnndR5b7UeZo4oNMnv7A@mail.gmail.com> (Matthew Hughes's message of "Fri, 7 Jul 2023 09:45:03 +0100")
Matthew Hughes <mhughes@uw.co.uk> writes:
> I'd be happy to submit a patch adding those tests if you'd like. Though I would
> like to just confirm that in the patch I shared it is not a bug that:
>
> git ls-files ":(attr:otherLabel)sub/" >actual &&
> test_must_be_empty actual
>
> I.e. that no files are listed here even tough `sub/fileSetLabel` has the
> attribute `otherLabel`?
I do not think it is a good idea to cast in stone the behaviour,
which we do not know if it is sensible, with a new test, before
knowning what behaviour we want.
I think in this case the common prefix optimization in "ls-files.c"
is broken. If we disable it like the attached illustration patch,
we will see that pathspecs that end with "sub" or "sub/" behave the
same way, which is what I think people would expect.
The code change in this illustration is not a "fix", of course ;-).
Thanks.
builtin/ls-files.c | 2 +-
t/t6135-pathspec-with-attrs.sh | 17 +++++++++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git c/builtin/ls-files.c w/builtin/ls-files.c
index a0229c3277..17baed30ca 100644
--- c/builtin/ls-files.c
+++ w/builtin/ls-files.c
@@ -724,7 +724,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
* submodule entry because the pathspec may match something inside the
* submodule.
*/
- if (recurse_submodules)
+ if (!!"disable common prefix optimization" || recurse_submodules)
max_prefix = NULL;
else
max_prefix = common_prefix(&pathspec);
diff --git c/t/t6135-pathspec-with-attrs.sh w/t/t6135-pathspec-with-attrs.sh
index 457cc167c7..a805fa132b 100755
--- c/t/t6135-pathspec-with-attrs.sh
+++ w/t/t6135-pathspec-with-attrs.sh
@@ -253,4 +253,21 @@ test_expect_success 'backslash cannot be used as a value' '
test_i18ngrep "for value matching" actual
'
+test_expect_success 'reading from .gitattributes in a subdirectory' '
+ test_when_finished "rm -f sub/.gitattributes" &&
+ test_write_lines "fileSetLabel label1" >sub/.gitattributes &&
+
+ git ls-files ":(attr:label1)" >actual &&
+ test_write_lines "sub/fileSetLabel" >expect &&
+ test_cmp expect actual &&
+
+ git ls-files ":(attr:label1)sub" >actual &&
+ test_write_lines "sub/fileSetLabel" >expect &&
+ test_cmp expect actual &&
+
+ git ls-files ":(attr:label1)sub/" >actual &&
+ test_write_lines "sub/fileSetLabel" >expect &&
+ test_cmp expect actual
+'
+
test_done
next prev parent reply other threads:[~2023-07-07 17:24 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-06 10:33 Expected behaviour for pathspecs matching attributes in subdirectories Matthew Hughes
2023-07-06 17:35 ` Junio C Hamano
2023-07-06 20:54 ` Matthew Hughes
2023-07-06 21:00 ` Matthew Hughes
2023-07-06 21:01 ` Junio C Hamano
2023-07-07 8:45 ` Matthew Hughes
2023-07-07 17:23 ` Junio C Hamano [this message]
2023-07-07 19:28 ` Eric Sunshine
2023-07-08 12:42 ` Matthew Hughes
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=xmqq1qhjbpoz.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=mhughes@uw.co.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.