Subject: Re: t4216-log-bloom.sh broken ?

From: Junio C Hamano <[email-masked]>
Date: Thu, 02 May 2024 13:05:40 -0700

Junio C Hamano <[email-masked]> writes:

> ... it is a very unsatisfactory workaround, compared to a world where we
> do not have to worry about such a broken mv (perhaps by noticing a
> broken macOS /bin/mv and automatically doing mv () { mv -f "$@" }
> for them).
>
> I am curious what other differences Torsten will find out between
> good macs and bad ones.  Perhaps we can narrow down the bad apples?

In any case, while we are waiting, I did a few "grep":

    $ git grep 'mv \(.*\)\.tmp \1' t
    t/lib-t6000.sh:	mv sed.script.tmp sed.script
    t/t7508-status.sh:	rm "$1" && mv "$1".tmp "$1"
    t/t8011-blame-split-file.sh:	mv one.tmp one &&
    t/t8011-blame-split-file.sh:	mv two.tmp two &&
    t/t9400-git-cvsserver-server.sh:	mv merge.tmp merge &&
    t/t9400-git-cvsserver-server.sh:	mv merge.tmp merge &&
    t/t9802-git-p4-filetype.sh:		mv empty-symlink,v.tmp empty-symlink,v

    $ git grep 'mv "\(.*\)\.tmp" "\1"' t
    t/lib-chunk.sh:	mv "$fn.tmp" "$fn"
    t/t3404-rebase-interactive.sh:	mv "$1.tmp" "$1"
    t/t5515-fetch-merge-logic.sh:	mv "$file.tmp" "$file"
    t/t7600-merge.sh:) >"$1.tmp" && mv "$1.tmp" "$1"
    t/t9001-send-email.sh:	mv "$1.tmp" "$1"
    t/t9001-send-email.sh:	mv "$1.tmp" "$1"

    $ git grep 'mv \(.*\)+ \1' t
    t/t4025-hunk-header.sh:	mv file+ file
    t/t6402-merge-rename.sh:	mv A+ A &&
    t/t6402-merge-rename.sh:	mv A+ A &&
    t/t6432-merge-recursive-space-options.sh:	mv text.txt+ text.txt &&
    t/t6432-merge-recursive-space-options.sh:	mv text.txt+ text.txt &&

There is nothing other than the one we found in lib-chunk.sh that
work on files under .git/objects/ that are made read-only, so we
should be OK with a workaround like the attached.

 t/lib-chunk.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git c/t/lib-chunk.sh w/t/lib-chunk.sh
index a7cd9c3c6d..9f01df190b 100644
--- c/t/lib-chunk.sh
+++ w/t/lib-chunk.sh
@@ -13,5 +13,6 @@ corrupt_chunk_file () {
 	fn=$1; shift
 	perl "$TEST_DIRECTORY"/lib-chunk/corrupt-chunk-file.pl \
 		"$@" <"$fn" >"$fn.tmp" &&
-	mv "$fn.tmp" "$fn"
+	# some vintages of macOS 'mv' fails to overwrite a read-only file.
+	mv -f "$fn.tmp" "$fn"
 }