From: Junio C Hamano <gitster@pobox.com>
To: LorenzoPegorari <lorenzo.pegorari2002@gmail.com>
Cc: git@vger.kernel.org, Derrick Stolee <stolee@gmail.com>,
Patrick Steinhardt <ps@pks.im>, Taylor Blau <me@ttaylorr.com>,
Elijah Newren <newren@gmail.com>,
Eric Sunshine <sunshine@sunshineco.com>
Subject: Re: [GSoC PATCH v3 4/5] t7700: test for promisor file content after repack
Date: Mon, 06 Apr 2026 15:05:37 -0700 [thread overview]
Message-ID: <xmqqldez9232.fsf@gitster.g> (raw)
In-Reply-To: <8e58c1263d15fb8dba8ce1d2866d369e938bf2b6.1775431990.git.lorenzo.pegorari2002@gmail.com> (LorenzoPegorari's message of "Mon, 6 Apr 2026 02:25:19 +0200")
LorenzoPegorari <lorenzo.pegorari2002@gmail.com> writes:
> +test_expect_success 'check one .promisor file content after repack' '
> + test_when_finished rm -rf prom_test &&
> + git init prom_test &&
> + path=prom_test/.git/objects/pack &&
> +
> + (
> + test_commit_bulk -C prom_test --start=1 1 &&
> +
> + # Simulate .promisor file by creating it manually
> + prom=$(ls $path/*.pack | sed "s/\.pack/.promisor/") &&
So "prom" is a list of filenames; since $path does not have any
funny letters that interferes, later use of unquotd $prom will
list these files. OK.
> + oid=$(git -C prom_test rev-parse HEAD) &&
> + echo "$oid ref" >$prom &&
Oh, not quite. How are we guaranteeing that there is only one file
in the list of files in $prom?
In any case, quoting from Documentation/CodingGuidelines:
- Redirection operators should be written with space before, but no
space after them. In other words, write 'echo test >"$file"'
instead of 'echo test> $file' or 'echo test > $file'. Note that
even though it is not required by POSIX to double-quote the
redirection target in a variable (as shown above), our code does so
because some versions of bash issue a warning without the quotes.
(incorrect)
cat hello > world < universe
echo hello >$world
(correct)
cat hello >world <universe
echo hello >"$world"
> + # Save the current .promisor content, repack, and check if correct
> + prom_before_repack=$(cat $prom) &&
This is misleading, unless you plan to update the early part of this
test to store a more realistic data in the $prom file. Wouldn't it
be equivanent to
prom_before_repack="$oid ref" &&
at this point?
> + git -C prom_test repack -a -d &&
> + prom=$(ls $path/*.pack | sed "s/\.pack/.promisor/") &&
We expect that there is only one .pack and .promisor file. Why
are we listing .pack and turning them to .promisor, instead of doing
prom=$(ls $path/*.promisor) &&
here? Don't we expect that this "repack" to recreate .promisor file
as well (and if we do not see the file then we detected another bug,
which is a good thing)?
> + # $prom should contain "$prom_before_repack <date>"
> + test_grep "$prom_before_repack " $prom &&
I do not quite understand this test. Ahh, OK. We expect that there
was only a single entry in the original, because that is what we
placed in the original .promisor file.
Enclose $prom inside a pair of double quotes, as it is misleading
without. I wasted a few minutes wondering where you are expecting
these possibly multiple promisor files from.
> + # Save the current .promisor content, repack, and check if correct
> + cat $prom >prom_before_repack &&
cp "$prom" prom_before_repack &&
would be more standard.
> + git -C prom_test repack -a -d &&
> + prom=$(ls $path/*.pack | sed "s/\.pack/.promisor/") &&
The same comment about "don't we know .promisor file should exist,
and shouldn't we check it directly?" applies here.
> + # $prom should be exactly the same as prom_before_repack
> + test_cmp prom_before_repack $prom
> + )
> +'
Same comment applies from earlier to the next test piece, I suspect.
Let's take a look.
> +
> +test_expect_success 'check multiple .promisor file content after repack' '
> + test_when_finished rm -rf prom_test &&
> + git init prom_test &&
> + path=prom_test/.git/objects/pack &&
> +
> + (
> + # Create 2 packs and simulate .promisor files by creating them manually
> + test_commit_bulk -C prom_test --start=1 1 &&
> + prom=$(ls $path/*.pack | sed "s/\.pack/.promisor/") &&
> + oid=$(git -C prom_test rev-parse HEAD) &&
> + echo "$oid ref" >$prom &&
> + prom_before_repack1=$(cat $prom) &&
> + test_commit_bulk -C prom_test --start=1 1 &&
> + prom=$(ls -t $path/*.pack | head -n 1 | sed "s/\.pack/.promisor/") &&
Do not pipe head into sed, as sed is more capable.
ls -t $path/*.pack | sed "s/.../;q"
> + oid=$(git -C prom_test rev-parse HEAD) &&
> + echo "$oid ref" >$prom &&
> + prom_before_repack2=$(cat $prom) &&
But more importantly, this may become a source of flakiness. These
two packfiles are likely to have very close timestamps and depending
on the timing, how heavily loaded the machine is, and the phase of
the moon, it is not guaranteed that you'd grab the name of the new
pack. Instead of sorting by type or getting the first one, which
would not work reliably, grab both and filter out what you already
have seen.
> + # Repack, and check if correct compared to previous saved .promisor content
> + git -C prom_test repack -a -d &&
> + prom=$(ls $path/*.pack | sed "s/\.pack/.promisor/") &&
> + # $prom should contain "$prom_before_repack1 <date>" & "$prom_before_repack2 <date>"
> + test_grep "$prom_before_repack1 " $prom &&
> + test_grep "$prom_before_repack2 " $prom &&
> +
> + # Save the current .promisor content, repack, and check if correct
> + cat $prom >prom_before_repack &&
> + git -C prom_test repack -a -d &&
> + prom=$(ls $path/*.pack | sed "s/\.pack/.promisor/") &&
> + # $prom should be exactly the same as prom_before_repack
> + test_cmp prom_before_repack $prom
> + )
> +'
> +
> test_done
next prev parent reply other threads:[~2026-04-06 22:05 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-21 21:28 [GSoC PATCH 0/3] preserve promisor files content after repack LorenzoPegorari
2026-03-21 21:28 ` [GSoC PATCH 1/3] pack-write: add explanation to promisor file content LorenzoPegorari
2026-03-21 21:28 ` [GSoC PATCH 2/3] pack-write: add helper to fill promisor file after repack LorenzoPegorari
2026-03-22 2:04 ` Eric Sunshine
2026-03-22 18:50 ` Lorenzo Pegorari
2026-03-21 21:29 ` [GSoC PATCH 3/3] repack-promisor: preserve content of promisor files " LorenzoPegorari
2026-03-22 19:16 ` [GSoC PATCH v2 0/4] preserve promisor files content " LorenzoPegorari
2026-03-22 19:16 ` [GSoC PATCH v2 1/4] pack-write: add explanation to promisor file content LorenzoPegorari
2026-03-23 21:07 ` Junio C Hamano
2026-03-25 21:33 ` Lorenzo Pegorari
2026-03-22 19:18 ` [GSoC PATCH v2 2/4] pack-write: add helper to fill promisor file after repack LorenzoPegorari
2026-03-23 20:27 ` Eric Sunshine
2026-03-26 16:15 ` Lorenzo Pegorari
2026-03-23 21:30 ` Junio C Hamano
2026-03-26 2:01 ` Lorenzo Pegorari
2026-03-22 19:18 ` [GSoC PATCH v2 3/4] repack-promisor: preserve content of promisor files " LorenzoPegorari
2026-03-23 21:48 ` Junio C Hamano
2026-03-26 2:12 ` Lorenzo Pegorari
2026-03-22 19:18 ` [GSoC PATCH v2 4/4] t7700: test for promisor file content " LorenzoPegorari
2026-04-06 0:23 ` [GSoC PATCH v3 0/5] preserve promisor files " LorenzoPegorari
2026-04-06 0:24 ` [GSoC PATCH v3 1/5] pack-write: add explanation to promisor file content LorenzoPegorari
2026-04-06 0:24 ` [GSoC PATCH v3 2/5] pack-write: add helper to fill promisor file after repack LorenzoPegorari
2026-04-06 17:22 ` Tian Yuchen
2026-04-06 18:40 ` Lorenzo Pegorari
2026-04-06 21:17 ` Junio C Hamano
2026-04-07 21:46 ` Lorenzo Pegorari
2026-04-07 2:01 ` Junio C Hamano
2026-04-07 21:52 ` Lorenzo Pegorari
2026-04-07 22:03 ` Junio C Hamano
2026-04-06 21:34 ` Junio C Hamano
2026-04-07 22:07 ` Lorenzo Pegorari
2026-04-06 0:25 ` [GSoC PATCH v3 3/5] repack-promisor: preserve content of promisor files " LorenzoPegorari
2026-04-06 0:25 ` [GSoC PATCH v3 4/5] t7700: test for promisor file content " LorenzoPegorari
2026-04-06 22:05 ` Junio C Hamano [this message]
2026-04-07 23:28 ` Lorenzo Pegorari
2026-04-07 18:10 ` Junio C Hamano
2026-04-07 23:11 ` Lorenzo Pegorari
2026-04-08 0:38 ` Lorenzo Pegorari
2026-04-06 0:25 ` [GSoC PATCH v3 5/5] t7703: test for promisor file content after geometric repack LorenzoPegorari
2026-04-10 15:01 ` [GSoC PATCH v4 0/5] preserve promisor files content after repack LorenzoPegorari
2026-04-10 15:02 ` [GSoC PATCH v4 1/5] pack-write: add explanation to promisor file content LorenzoPegorari
2026-04-10 15:02 ` [GSoC PATCH v4 2/5] pack-write: add helper to fill promisor file after repack LorenzoPegorari
2026-04-10 16:01 ` Junio C Hamano
2026-04-10 16:34 ` Lorenzo Pegorari
2026-04-10 18:10 ` [PATCH] CodingGuidelines: st_mtimespec vs st_mtim vs st_mtime Junio C Hamano
2026-04-16 23:46 ` Elijah Newren
2026-04-17 4:25 ` Junio C Hamano
2026-04-10 15:03 ` [GSoC PATCH v4 3/5] repack-promisor: preserve content of promisor files after repack LorenzoPegorari
2026-04-10 15:04 ` [GSoC PATCH v4 4/5] t7700: test for promisor file content " LorenzoPegorari
2026-04-10 15:04 ` [GSoC PATCH v4 5/5] t7703: test for promisor file content after geometric repack LorenzoPegorari
2026-04-10 15:47 ` [GSoC PATCH v4 0/5] preserve promisor files content after repack Junio C Hamano
2026-04-10 16:44 ` Lorenzo Pegorari
2026-04-10 22:54 ` [GSoC PATCH v5 0/6] " LorenzoPegorari
2026-04-10 22:54 ` [GSoC PATCH v5 1/6] pack-write: add explanation to promisor file content LorenzoPegorari
2026-04-10 22:55 ` [GSoC PATCH v5 2/6] repack-promisor add helper to fill promisor file after repack LorenzoPegorari
2026-04-10 23:30 ` Junio C Hamano
2026-04-11 1:59 ` Lorenzo Pegorari
2026-04-12 6:27 ` Junio C Hamano
2026-04-17 0:30 ` Lorenzo Pegorari
2026-04-10 22:55 ` [GSoC PATCH v5 3/6] repack-promisor: preserve content of promisor files " LorenzoPegorari
2026-04-11 18:25 ` Tian Yuchen
2026-04-17 0:34 ` Lorenzo Pegorari
2026-04-10 22:55 ` [GSoC PATCH v5 4/6] t7700: test for promisor file content " LorenzoPegorari
2026-04-10 22:56 ` [GSoC PATCH v5 5/6] t7703: test for promisor file content after geometric repack LorenzoPegorari
2026-04-11 18:49 ` Tian Yuchen
2026-04-17 0:46 ` Lorenzo Pegorari
2026-04-10 22:56 ` [GSoC PATCH v5 6/6] repack-promisor: add missing headers LorenzoPegorari
2026-04-18 14:16 ` [GSoC PATCH v6 0/6] preserve promisor files content after repack LorenzoPegorari
2026-04-18 14:16 ` [GSoC PATCH v6 1/6] pack-write: add explanation to promisor file content LorenzoPegorari
2026-04-18 14:17 ` [GSoC PATCH v6 2/6] repack-promisor add helper to fill promisor file after repack LorenzoPegorari
2026-04-18 14:17 ` [GSoC PATCH v6 3/6] repack-promisor: preserve content of promisor files " LorenzoPegorari
2026-04-18 14:17 ` [GSoC PATCH v6 4/6] t7700: test for promisor file content " LorenzoPegorari
2026-04-18 14:17 ` [GSoC PATCH v6 5/6] t7703: test for promisor file content after geometric repack LorenzoPegorari
2026-04-18 14:17 ` [GSoC PATCH v6 6/6] repack-promisor: add missing headers LorenzoPegorari
2026-05-12 6:49 ` [GSoC PATCH v6 0/6] preserve promisor files content after repack Junio C Hamano
2026-04-10 23:05 ` [GSoC PATCH v4 0/5] " Junio C Hamano
2026-04-11 2:02 ` Junio C Hamano
2026-04-11 14:05 ` Lorenzo Pegorari
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=xmqqldez9232.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=lorenzo.pegorari2002@gmail.com \
--cc=me@ttaylorr.com \
--cc=newren@gmail.com \
--cc=ps@pks.im \
--cc=stolee@gmail.com \
--cc=sunshine@sunshineco.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