# HG changeset patch # User Matt Harbison # Date 1727901273 14400 # Node ID 4ee2505f9f65d4a55374124405cc615f211347c1 # Parent 2eeca9a8f4a733e62ac26643edfb0222bbbe0b8d tests: stabilize `test-merge-partial-tool.t` on Windows The test was previously failing because it was opening the shell scripts being used as an executable in a text editor, and problems cascaded from there. diff -r 2eeca9a8f4a7 -r 4ee2505f9f65 tests/test-merge-partial-tool.t --- a/tests/test-merge-partial-tool.t Wed Oct 02 11:43:22 2024 -0400 +++ b/tests/test-merge-partial-tool.t Wed Oct 02 16:34:33 2024 -0400 @@ -5,8 +5,8 @@ $ cat >> "$TESTTMP/head.sh" <<'EOF' > #!/bin/sh > for f in "$@"; do - > head -5 $f > tmp - > mv -f tmp $f + > head -5 "$f" > tmp + > mv -f tmp "$f" > done > EOF $ chmod +x "$TESTTMP/head.sh" @@ -14,8 +14,8 @@ $ cat >> "$TESTTMP/tail.sh" <<'EOF' > #!/bin/sh > for f in "$@"; do - > tail -5 $f > tmp - > mv -f tmp $f + > tail -5 "$f" > tmp + > mv -f tmp "$f" > done > EOF $ chmod +x "$TESTTMP/tail.sh" @@ -30,6 +30,27 @@ > tail.order=1 > EOF +On Windows, running $TESTTMP/script.sh will open script.sh in an editor, if +that's what the configured file association is. The code shell quotes the +*.executable value, so we can't set it to `sh $TESTTMP/script.sh`, because it +tries to run that as the executable. As a workaround, generate a bat file that +invokes `sh script.sh`, and passes the args along. + +#if windows + $ cat >> "$TESTTMP/head.bat" <<'EOF' + > @echo off + > sh "%TESTTMP%/head.sh" %* + > EOF + + $ cat >> "$TESTTMP/tail.bat" <<'EOF' + > @echo off + > sh "%TESTTMP%/tail.sh" %* + > EOF + + $ sed 's/head.sh/head.bat/g' "${HGRCPATH}" > "${HGRCPATH}.tmp" + $ sed 's/tail.sh/tail.bat/g' "${HGRCPATH}.tmp" > "${HGRCPATH}" +#endif + $ make_commit() { > echo "$@" | xargs -n1 > file > hg add file 2> /dev/null @@ -294,6 +315,23 @@ > [partial-merge-tools] > log-args.executable=$TESTTMP/log-args.sh > EOF + +On Windows, running $TESTTMP/script.sh will open script.sh in an editor, if +that's what the configured file association is. The code shell quotes the +*.executable value, so we can't set it to `sh $TESTTMP/script.sh`, because it +tries to run that as the executable. As a workaround, generate a bat file that +invokes `sh script.sh`, and passes the args along. + +#if windows + $ cat >> "$TESTTMP/log-args.bat" <<'EOF' + > @echo off + > sh "%TESTTMP%/log-args.sh" %* + > EOF + + $ sed 's/log-args.sh/log-args.bat/g' "$HGRCPATH" > "${HGRCPATH}.tmp" + $ mv "${HGRCPATH}.tmp" "${HGRCPATH}" +#endif + $ hg up -C 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg merge 1