promote-to-main.sh checks out main. The tooling lives only on the site branch, so that checkout removes tools/promote-to-main.sh while the script is still running - and bash reads a script lazily, by file offset, so it would carry on executing whatever bytes happen to land there. While manipulating branches. Not theoretical: main does not have tools/ right now, so the first real use would have hit it. Both versions now copy themselves to a temp file and re-exec from there. The bash copy unlinks itself immediately, since the open handle keeps working. The Windows copy has the same hazard for the same reason - cmd.exe re-seeks the batch file after every command - and two extra traps worth naming: the copy runs from %TEMP%, so the repository root has to travel with it rather than being derived from %~dp0, and %errorlevel% inside a parenthesised block is expanded when the block is PARSED, before the call it is meant to report on. Scope: product
5.5 KiB
5.5 KiB