Junio C Hamano <gitster@xxxxxxxxx> 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" }