From: "René Scharfe" <l.s.r@web.de>
To: Denton Liu <liu.denton@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>,
Brandon Williams <bwilliamseng@gmail.com>,
git <git@vger.kernel.org>, Jeff King <peff@peff.net>
Subject: Re: [PATCH 2/4] t1450: increase test coverage of in-tree d/f detection
Date: Thu, 21 May 2020 15:31:26 +0200 [thread overview]
Message-ID: <1f982a11-358c-195d-21f4-0299f5b60ff2@web.de> (raw)
In-Reply-To: <20200521102053.GA578930@generichostname>
Am 21.05.20 um 12:20 schrieb Denton Liu:
> Hi René,
>
> On Thu, May 21, 2020 at 11:52:28AM +0200, René Scharfe wrote:
>> diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
>> index 91a6e34f38..9640ac8ff2 100755
>> --- a/t/t1450-fsck.sh
>> +++ b/t/t1450-fsck.sh
>> @@ -257,21 +257,33 @@ test_expect_success 'tree object with duplicate entries' '
>> test_i18ngrep "error in tree .*contains duplicate file entries" out
>> '
>>
>> -test_expect_success 'tree object with dublicate names' '
>> - test_when_finished "remove_object \$blob" &&
>> - test_when_finished "remove_object \$tree" &&
>> - test_when_finished "remove_object \$badtree" &&
>> - blob=$(echo blob | git hash-object -w --stdin) &&
>> - printf "100644 blob %s\t%s\n" $blob x.2 >tree &&
>> - tree=$(git mktree <tree) &&
>> - printf "100644 blob %s\t%s\n" $blob x.1 >badtree &&
>> - printf "100644 blob %s\t%s\n" $blob x >>badtree &&
>> - printf "040000 tree %s\t%s\n" $tree x >>badtree &&
>> - badtree=$(git mktree <badtree) &&
>> - test_must_fail git fsck 2>out &&
>> - test_i18ngrep "$badtree" out &&
>> - test_i18ngrep "error in tree .*contains duplicate file entries" out
>> -'
>> +check_duplicate_names () {
>> + expect=$1 &&
>> + shift &&
>> + names=$@ &&
>
> It doesn't really make sense to use $@ here since we're not using the
> argument list behaviour of $@; we're just expanding it normally. I would
> replace this with $* instead.
The assignment to $names flattens the list, so $@ and $* behave the same
here. I didn't think much about it, but it would be nice to support names
that contain spaces, which we could do by writing the arguments to a file.
And if we go that route then support for names with newlines would be nice
as well. I'm not sure it's worth it, but a patch for that is below.
At least I'd like to keep the $@ as kind of a reminder that we want to
pass on arguments (full names), not words.
>
>> + test_expect_$expect "tree object with duplicate names: $names" '
>> + test_when_finished "remove_object \$blob" &&
>> + test_when_finished "remove_object \$tree" &&
>> + test_when_finished "remove_object \$badtree" &&
>> + blob=$(echo blob | git hash-object -w --stdin) &&
>> + printf "100644 blob %s\t%s\n" $blob x.2 >tree &&
>> + tree=$(git mktree <tree) &&
>> + for name in $names
>> + do
>> + case "$name" in
>> + */) printf "040000 tree %s\t%s\n" $tree "${name%/}" ;;
>> + *) printf "100644 blob %s\t%s\n" $blob "$name" ;;
>> + esac
>> + done >badtree &&
>> + badtree=$(git mktree <badtree) &&
>> + test_must_fail git fsck 2>out &&
>> + test_i18ngrep "$badtree" out &&
>> + test_i18ngrep "error in tree .*contains duplicate file entries" out
>> + '
>> +}
>> +
>> +check_duplicate_names success x x.1 x/
>> +check_duplicate_names success x x.1.2 x.1/ x/
>>
>> test_expect_success 'unparseable tree object' '
>> test_oid_cache <<-\EOF &&
>> --
>> 2.26.2
-- >8 --
Subject: [PATCH 5/4] t1450: support names with spaces in check_duplicate_names()
Signed-off-by: René Scharfe <l.s.r@web.de>
---
t/t1450-fsck.sh | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
index 344a2aad82..b1766c8e11 100755
--- a/t/t1450-fsck.sh
+++ b/t/t1450-fsck.sh
@@ -257,10 +257,20 @@ test_expect_success 'tree object with duplicate entries' '
test_i18ngrep "error in tree .*contains duplicate file entries" out
'
+names_to_tree () {
+ awk -v blob="$1" -v tree="$2" -v RS='\0' -v FS='/' '
+ NF == 1 {printf "100644 blob %s\t%s%c", blob, $1, 0}
+ NF == 2 {printf "040000 tree %s\t%s%c", tree, $1, 0}
+ '
+}
+
check_duplicate_names () {
expect=$1 &&
shift &&
- names=$@ &&
+ for name in "$@"
+ do
+ printf "%s\0" "$name"
+ done >names &&
test_expect_$expect "tree object with duplicate names: $names" '
test_when_finished "remove_object \$blob" &&
test_when_finished "remove_object \$tree" &&
@@ -268,14 +278,8 @@ check_duplicate_names () {
blob=$(echo blob | git hash-object -w --stdin) &&
printf "100644 blob %s\t%s\n" $blob x.2 >tree &&
tree=$(git mktree <tree) &&
- for name in $names
- do
- case "$name" in
- */) printf "040000 tree %s\t%s\n" $tree "${name%/}" ;;
- *) printf "100644 blob %s\t%s\n" $blob "$name" ;;
- esac
- done >badtree &&
- badtree=$(git mktree <badtree) &&
+ names_to_tree $blob $tree <names >badtree &&
+ badtree=$(git mktree -z <badtree) &&
test_must_fail git fsck 2>out &&
test_i18ngrep "$badtree" out &&
test_i18ngrep "error in tree .*contains duplicate file entries" out
--
2.26.2
next prev parent reply other threads:[~2020-05-21 13:31 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-09 6:19 invalid tree and commit object Brandon Williams
2020-05-09 10:16 ` René Scharfe
2020-05-09 7:16 ` Johannes Schindelin
2020-05-09 11:51 ` René Scharfe
2020-05-09 17:28 ` Junio C Hamano
2020-05-09 19:24 ` René Scharfe
2020-05-09 20:27 ` Junio C Hamano
2020-05-10 9:07 ` René Scharfe
2020-05-10 16:12 ` René Scharfe
2020-05-11 16:25 ` Junio C Hamano
2020-05-13 16:27 ` Brandon Williams
2020-05-21 9:51 ` René Scharfe
2020-05-21 9:52 ` [PATCH 1/4] fsck: fix a typo in a comment René Scharfe
2020-05-21 10:10 ` Denton Liu
2020-05-21 11:15 ` René Scharfe
2020-05-21 9:52 ` [PATCH 2/4] t1450: increase test coverage of in-tree d/f detection René Scharfe
2020-05-21 10:20 ` Denton Liu
2020-05-21 13:31 ` René Scharfe [this message]
2020-05-21 18:01 ` Junio C Hamano
2020-05-21 9:52 ` [PATCH 3/4] t1450: demonstrate undetected in-tree d/f conflict René Scharfe
2020-05-21 9:52 ` [PATCH 4/4] fsck: detect more in-tree d/f conflicts René Scharfe
2020-05-10 16:37 ` invalid tree and commit object Junio C Hamano
2020-05-21 9:51 ` René Scharfe
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=1f982a11-358c-195d-21f4-0299f5b60ff2@web.de \
--to=l.s.r@web.de \
--cc=bwilliamseng@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=liu.denton@gmail.com \
--cc=peff@peff.net \
/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.
Code repositories for project(s) associated with this public 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).