From b3d9cf782104846dbaffc6b7b29d42b72664ace8 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 22 Sep 2026 01:03:51 +0200 Subject: [PATCH] Tell an existing Windows clone how to get its build script back to LF `*.sh text eol=lf` reaches new clones only. A clone checked out before the rule keeps scripts/build-quic-native.sh with carriage returns after pulling, because the blob did not change: git neither rewrites the file nor reports it modified, and the container still dies on the interpreter `bash\r`. The README now gives the repair where a newcomer meets the container path, and .gitattributes points to it. Verified on clones made at 367c9bc and moved to c25de5a, from Git Bash and from Windows PowerShell 5.1: 109 CR bytes before, none after, status clean. The line uses `;` so it runs in both. Co-Authored-By: Claude Opus 5 --- .gitattributes | 5 +++++ native/GameCult.Mesh.Quic.Native/README.md | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/.gitattributes b/.gitattributes index 2b8f1fee..1cb59805 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,4 +7,9 @@ # shebang reads as the interpreter `bash\r`, which does not exist. Nothing about # that failure names line endings, and the same clone builds and tests fine # everywhere else, so it reads as a broken image rather than a broken checkout. +# +# A clone checked out before this rule keeps its carriage returns, because the +# blob is unchanged and git has no reason to rewrite the file. The one-line +# repair is in native/GameCult.Mesh.Quic.Native/README.md, beside the container +# path it unblocks. *.sh text eol=lf diff --git a/native/GameCult.Mesh.Quic.Native/README.md b/native/GameCult.Mesh.Quic.Native/README.md index c9fd1e63..7248f3bd 100644 --- a/native/GameCult.Mesh.Quic.Native/README.md +++ b/native/GameCult.Mesh.Quic.Native/README.md @@ -117,6 +117,15 @@ it is: `${PWD}` in PowerShell, `$(pwd)` in a POSIX shell. The second is one line because the shell it is offered to is not decided here; a continuation would have to pick one, and a backtick pasted into a POSIX shell is not a continuation. +A Windows clone made before `.gitattributes` kept shell scripts at LF still has +`scripts/build-quic-native.sh` with carriage returns, and pulling does not fix +it: the script's content did not change, so git neither rewrites it nor reports +it modified. The container then dies at once on the interpreter `bash\r`. From +the repository root, in either shell, this checks the script out again under the +current attributes: + + git rm --cached -q scripts/build-quic-native.sh; git checkout HEAD -- scripts/build-quic-native.sh + `--security-opt seccomp=unconfined` is load-bearing, not caution. The ThreadSanitizer configuration needs the process's address space where it expects it, so `scripts/mutate-cultmesh.mjs` re-executes those runs under `setarch -R`,