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

[PATCH] t6011: fix misconversion from perl to sed

From
Junio C Hamano <gitster@pobox.com>
Date
May 6, 2025, 22:48 UTC
Message-ID
<xmqq8qn9fj8o.fsf@gitster.g>
In-Reply-To
<71fcb24d-55e3-40bb-9368-5b47aa180993@web.de>

No, this is not about a quiz on regexp compatibility between Perl and sed.

Back when cdbdc6bf (t: refactor tests depending on Perl substitution operator, 2025-04-03) rewrite many use of perl with sed, the general pattern of the original scripts were

    chmod +w some_read_only_file &&
    perl -p -e "regexp to munge" some_read_only_file >some_tmp &&
    mv some_tmp some_read_only_file

persumably because the author new replacing some_read_only_file with "mv" at the last step would not work without "mv -f" in some environments (GNU does not seem to give any prompt when not running interactively, which is what happens when running t/ scripts). Replacing perl with sed would be fine as long as sed with updated regexp does the equivalent munging.

But one place used to use a different construct in the original:
    perl -i.bak -p -e "regexp to munge" some_read_only_file

With _no_ temporary file or "mv", "perl -i" allows you to replace a read-only file in place.

When we replaced the use of "perl" with "sed" in the said commit, however, because "sed -i" is not portable, we rewrote that in-place replacement to

    sed "regexp to munge" some_read_only_file >some_tmp &&
    mv some_tmp some_read_only_file

Again, unfortunately that does not work in some environment, without "mv -f".

We could run "mv -f" here, but we would then need to remove "chmod +w" and have them use "mv -f" instead at all places that were touched cdbdc6bf (t: refactor tests depending on Perl substitution operator, 2025-04-03) to be consistent (and more concise).

For now, let's make it consistent in the other direction by mimick the other places that made the target read-write before moving.

Speaking of portability, the outcome of using "sed" on non-text files is unspecified, so the entire exercise of cdbdc6bf may have needed to be reverted if people still used ancient version of "standard compliant" sed that barfs on non-text files, but these days we may be able to get away with "BSDs and GNU seem OK with it" ;-) But one fix at a time.

Reported-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 t/t6011-rev-list-with-bad-commit.sh | 1 +
 1 file changed, 1 insertion(+)
diff --git a/t/t6011-rev-list-with-bad-commit.sh b/t/t6011-rev-list-with-bad-commit.sh
index b6f3344dbf..1dd1e50d21 100755
--- a/t/t6011-rev-list-with-bad-commit.sh
+++ b/t/t6011-rev-list-with-bad-commit.sh
@@ -38,6 +38,7 @@ test_expect_success 'verify number of revisions' \
 test_expect_success 'corrupt second commit object' '
 	for p in .git/objects/pack/*.pack
 	do
+		chmod +w "$p" &&
 		sed "s/second commit/socond commit/" "$p" >"$p.munged" &&
 		mv "$p.munged" "$p" ||
 		return 1
-- 
2.49.0-615-gd1e3f1cce9
Previous: Junio C HamanoNext: Patrick Steinhardt
Message 3 of 5 in “Problems with t6011”
  1. Torsten BögershausenMay 6, 2025
  2. Junio C HamanoMay 6, 2025
  3. t6011: fix misconversion from perl to sedJunio C Hamano, May 6, 2025
  4. Patrick SteinhardtMay 7, 2025
  5. Junio C HamanoMay 7, 2025

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.