• src/doors/syncdoom/deploy.bat deploy.sh src/doors/syncduke/deploy.bat

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sat Jun 27 03:03:33 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/339ec9da469f2cd95f72b8fe
    Added Files:
    src/doors/syncdoom/deploy.bat deploy.sh src/doors/syncduke/deploy.bat deploy.sh
    Modified Files:
    src/doors/syncdoom/COMPILING.md build.bat build.sh src/doors/syncduke/README.md build.bat build.sh
    Log Message:
    syncduke/syncdoom: split deploy out of the build into deploy.sh/deploy.bat

    Building no longer auto-installs the binary into a live xtrn dir -- build.sh / build.bat now only produce build/<door> (build-msvc\Release\<door>.exe on Windows), and a new deploy.sh / deploy.bat carries it to the door's xtrn dir(s) on demand. A sysop can rebuild and test before pushing a new binary to a running BBS.

    This also fixes a 0-byte-binary bug on SYMLINK=1 installs where the live xtrn/<door>/<door> is a server-side symlink back to the build output, exposed over an SMB mount as a plain file on a different device. The old in-build
    `cp -f "$EXE" live/<door>` had source and dest resolve to the same physical file, but `-ef` and cp's same-file guard compare st_dev/st_ino -- which differ across the mount -- so cp opened the dest O_TRUNC and zeroed the build output to
    0 bytes before reading a byte. deploy.sh guards against it two ways: skip when the dest already has identical content (catches the cross-mount self-reference -ef misses, and preserves the symlink), and otherwise copy via a temp file + atomic rename so the source can never be the O_TRUNC victim. deploy.bat skips via `fc /b`.

    Docs (syncduke README, syncdoom COMPILING) updated for the two-step flow.

    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net