diff --git a/src/builder/CMakeLists.txt b/src/builder/CMakeLists.txt
index 9160968..ccd6d35 100644
--- a/src/builder/CMakeLists.txt
+++ b/src/builder/CMakeLists.txt
@@ -80,10 +80,6 @@ if (requirements)
install(TARGETS "sai-builder"
RUNTIME DESTINATION "${BIN_DIR}" COMPONENT builder)
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/scripts/"
- DESTINATION "${BIN_DIR}"
- COMPONENT builder
- FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
endif(requirements)
include(CPack)
diff --git a/src/builder/b-nspawn.c b/src/builder/b-nspawn.c
index 5d47173..9bcf177 100644
--- a/src/builder/b-nspawn.c
+++ b/src/builder/b-nspawn.c
@@ -44,6 +44,137 @@ static char csep = '/';
static char csep = '\\';
#endif
+const char *git_helper_sh =
+ "#!/bin/bash\n"
+ "export PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin\n"
+ "set -e\n"
+ "echo \"git_helper_sh: starting\"\n"
+ "OPERATION=$1\n"
+ "shift\n"
+ "if [ \"$OPERATION\" == \"mirror\" ]; then\n"
+ " REMOTE_URL=$1\n"
+ " REF=$2\n"
+ " HASH=$3\n"
+ " MIRROR_PATH=\"$HOME/git-mirror/$4\"\n"
+ " for i in $(seq 1 60); do\n"
+ " if [ -d \"$MIRROR_PATH/.git\" ]; then\n"
+ " if git -C \"$MIRROR_PATH\" rev-parse -q --verify \"ref-$HASH\" > /dev/null; then\n"
+ " exit 0\n"
+ " fi\n"
+ " fi\n"
+ " if mkdir \"$MIRROR_PATH.lock\" 2>/dev/null; then\n"
+ " trap 'rm -rf \"$MIRROR_PATH.lock\"' EXIT\n"
+ " if [ -d \"$MIRROR_PATH/.git\" ]; then\n"
+ " if git -C \"$MIRROR_PATH\" rev-parse -q --verify \"ref-$HASH\" > /dev/null; then\n"
+ " exit 0\n"
+ " fi\n"
+ " fi\n"
+ " mkdir -p \"$MIRROR_PATH\"\n"
+ " if [ ! -d \"$MIRROR_PATH/.git\" ]; then\n"
+ " git init --bare \"$MIRROR_PATH\"\n"
+ " fi\n"
+ " REFSPEC=\"$REF:ref-$HASH\"\n"
+ " git -C \"$MIRROR_PATH\" fetch \"$REMOTE_URL\" \"+$REFSPEC\"\n"
+ " exit 0\n"
+ " fi\n"
+ " echo \"git mirror locked, waiting...\"\n"
+ " sleep 1\n"
+ " done\n"
+ " exit 1\n"
+ "elif [ \"$OPERATION\" == \"checkout\" ]; then\n"
+ " MIRROR_PATH=\"$HOME/git-mirror/$1\"\n"
+ " BUILD_DIR=$2\n"
+ " HASH=$3\n"
+ " if [ ! -d \"$BUILD_DIR/.git\" ]; then\n"
+ " rm -rf \"$BUILD_DIR\"\n"
+ " mkdir -p \"$BUILD_DIR\"\n"
+ " git -C \"$BUILD_DIR\" init\n"
+ " fi\n"
+ " if ! git -C \"$BUILD_DIR\" fetch \"$MIRROR_PATH\" \"ref-$HASH\"; then\n"
+ " exit 2\n"
+ " fi\n"
+ " git -C \"$BUILD_DIR\" checkout -f \"$HASH\"\n"
+ " git -C \"$BUILD_DIR\" clean -fdx\n"
+ "else\n"
+ " exit 1\n"
+ "fi\n"
+ "echo \">>> Git helper script finished.\"\n"
+ "exit 0\n"
+;
+
+const char *git_helper_bat =
+ "@echo on\n"
+ "setlocal EnableDelayedExpansion\n"
+ "echo \"git_helper_bat: starting\"\n"
+ "set \"OPERATION=%~1\"\n"
+ "echo \"OPERATION: !OPERATION!\"\n"
+ "if /i \"!OPERATION!\"==\"mirror\" (\n"
+ " set \"REMOTE_URL=%~2\"\n"
+ " set \"REF=%~3\"\n"
+ " set \"HASH=%~4\"\n"
+ " set \"MIRROR_PATH=%HOME%\\\\git-mirror\\\\%~5\"\n"
+ " echo \"REMOTE_URL: !REMOTE_URL!\"\n"
+ " echo \"REF: !REF!\"\n"
+ " echo \"HASH: !HASH!\"\n"
+ " echo \"MIRROR_PATH: !MIRROR_PATH!\"\n"
+ " :lock_wait\n"
+ " mkdir \"!MIRROR_PATH!.lock\" 2>nul\n"
+ " if errorlevel 1 (\n"
+ " echo \"git mirror locked, waiting...\"\n"
+ " timeout /t 1 /nobreak > nul\n"
+ " goto :lock_wait\n"
+ " )\n"
+ " if exist \"!MIRROR_PATH!\\\\.git\" (\n"
+ " git -C \"!MIRROR_PATH!\" rev-parse -q --verify \"ref-!HASH!\" > nul 2> nul\n"
+ " if exist !MIRROR_PATH!\\\\.git if not errorlevel 1 (\n"
+ " rmdir \"!MIRROR_PATH!.lock\"\n"
+ " exit /b 0\n"
+ " )\n"
+ " )\n"
+ " if not exist \"!MIRROR_PATH!\\\\.\" (\n"
+ " mkdir \"!MIRROR_PATH!\"\n"
+ " )\n"
+ " if not exist \"!MIRROR_PATH!\\\\.git\" (\n"
+ " git init --bare \"!MIRROR_PATH!\"\n"
+ " if errorlevel 1 (\n"
+ " rmdir \"!MIRROR_PATH!.lock\"\n"
+ " exit /b 1\n"
+ " )\n"
+ " )\n"
+ " set \"REFSPEC=!REF!:ref-!HASH!\"\n"
+ " echo \"REFSPEC: !REFSPEC!\"\n"
+ " git -C \"!MIRROR_PATH!\" fetch \"!REMOTE_URL!\" \"!REFSPEC!\" 2>&1\n"
+ " if !ERRORLEVEL! neq 0 (\n"
+ " echo \"git fetch failed with errorlevel !ERRORLEVEL!\"\n"
+ " rmdir \"!MIRROR_PATH!.lock\"\n"
+ " exit /b 1\n"
+ " )\n"
+ " rmdir \"!MIRROR_PATH!.lock\"\n"
+ " exit /b 0\n"
+ ")\n"
+ "if /i \"!OPERATION!\"==\"checkout\" (\n"
+ " set \"MIRROR_PATH=%HOME%\\\\git-mirror\\\\%~2\"\n"
+ " set \"BUILD_DIR=%~3\"\n"
+ " set \"HASH=%~4\"\n"
+ " echo \"MIRROR_PATH: !MIRROR_PATH!\"\n"
+ " echo \"BUILD_DIR: !BUILD_DIR!\"\n"
+ " echo \"HASH: !HASH!\"\n"
+ " if not exist \"!BUILD_DIR!\\\\.git\" (\n"
+ " if exist \"!BUILD_DIR!\\\\\" rmdir /s /q \"!BUILD_DIR!\"\n"
+ " mkdir \"!BUILD_DIR!\"\n"
+ " git -C \"!BUILD_DIR!\" init\n"
+ " if errorlevel 1 exit /b 1\n"
+ " )\n"
+ " git -C \"!BUILD_DIR!\" fetch \"!MIRROR_PATH!\" \"ref-!HASH!\"\n"
+ " if errorlevel 1 exit /b 2\n"
+ " git -C \"!BUILD_DIR!\" checkout -f \"!HASH!\"\n"
+ " if errorlevel 1 exit /b 1\n"
+ " echo \">>> Git helper script finished.\"\n"
+ " exit /b 0\n"
+ ")\n"
+ "exit /b 1\n"
+;
+
extern struct lws_vhost *builder_vhost;
struct ws_capture_chunk *
diff --git a/src/builder/b-task.c b/src/builder/b-task.c
index 5a00ae3..58fa268 100644
--- a/src/builder/b-task.c
+++ b/src/builder/b-task.c
@@ -815,6 +815,41 @@ saib_ws_json_rx_builder(struct sai_plat_server *spm, const void *in, size_t len)
*/
ns->inp[n] = '\0';
+ {
+ char script_path[512];
+ int fd;
+
+ /* create git_helper.sh */
+ lws_snprintf(script_path, sizeof(script_path), "%s%cgit_helper.sh",
+ ns->inp, csep);
+#if defined(WIN32)
+ if (_sopen_s(&fd, script_path, _O_CREAT | _O_TRUNC | _O_WRONLY,
+ _SH_DENYNO, _S_IWRITE))
+ fd = -1;
+#else
+ fd = open(script_path, O_CREAT | O_TRUNC | O_WRONLY, 0755);
+#endif
+ if (fd >= 0) {
+ write(fd, git_helper_sh, strlen(git_helper_sh));
+ close(fd);
+ }
+
+ /* create git_helper.bat */
+ lws_snprintf(script_path, sizeof(script_path), "%s%cgit_helper.bat",
+ ns->inp, csep);
+#if defined(WIN32)
+ if (_sopen_s(&fd, script_path, _O_CREAT | _O_TRUNC | _O_WRONLY,
+ _SH_DENYNO, _S_IWRITE))
+ fd = -1;
+#else
+ fd = open(script_path, O_CREAT | O_TRUNC | O_WRONLY, 0644);
+#endif
+ if (fd >= 0) {
+ write(fd, git_helper_bat, strlen(git_helper_bat));
+ close(fd);
+ }
+ }
+
saib_set_ns_state(ns, NSSTATE_EXECUTING_STEPS);
ns->user_cancel = 0;
diff --git a/src/builder/scripts/git_helper.bat b/src/builder/scripts/git_helper.bat
deleted file mode 100644
index ec2b3d8..0000000
--- a/src/builder/scripts/git_helper.bat
+++ /dev/null
@@ -1,70 +0,0 @@
-@echo on
-setlocal EnableDelayedExpansion
-echo "git_helper_bat: starting"
-set "OPERATION=%~1"
-echo "OPERATION: !OPERATION!"
-if /i "!OPERATION!"=="mirror" (
- set "REMOTE_URL=%~2"
- set "REF=%~3"
- set "HASH=%~4"
- set "MIRROR_PATH=%HOME%\\git-mirror\\%~5"
- echo "REMOTE_URL: !REMOTE_URL!"
- echo "REF: !REF!"
- echo "HASH: !HASH!"
- echo "MIRROR_PATH: !MIRROR_PATH!"
- :lock_wait
- mkdir "!MIRROR_PATH!.lock" 2>nul
- if errorlevel 1 (
- echo "git mirror locked, waiting..."
- timeout /t 1 /nobreak > nul
- goto :lock_wait
- )
- if exist "!MIRROR_PATH!\\.git" (
- git -C "!MIRROR_PATH!" rev-parse -q --verify "ref-!HASH!" > nul 2> nul
- if exist !MIRROR_PATH!\\.git if not errorlevel 1 (
- rmdir "!MIRROR_PATH!.lock"
- exit /b 0
- )
- )
- if not exist "!MIRROR_PATH!\\." (
- mkdir "!MIRROR_PATH!"
- )
- if not exist "!MIRROR_PATH!\\.git" (
- git init --bare "!MIRROR_PATH!"
- if errorlevel 1 (
- rmdir "!MIRROR_PATH!.lock"
- exit /b 1
- )
- )
- set "REFSPEC=!REF!:ref-!HASH!"
- echo "REFSPEC: !REFSPEC!"
- git -C "!MIRROR_PATH!" fetch "!REMOTE_URL!" "!REFSPEC!" 2>&1
- if !ERRORLEVEL! neq 0 (
- echo "git fetch failed with errorlevel !ERRORLEVEL!"
- rmdir "!MIRROR_PATH!.lock"
- exit /b 1
- )
- rmdir "!MIRROR_PATH!.lock"
- exit /b 0
-)
-if /i "!OPERATION!"=="checkout" (
- set "MIRROR_PATH=%HOME%\\git-mirror\\%~2"
- set "BUILD_DIR=%~3"
- set "HASH=%~4"
- echo "MIRROR_PATH: !MIRROR_PATH!"
- echo "BUILD_DIR: !BUILD_DIR!"
- echo "HASH: !HASH!"
- if not exist "!BUILD_DIR!\\.git" (
- if exist "!BUILD_DIR!\\" rmdir /s /q "!BUILD_DIR!"
- mkdir "!BUILD_DIR!"
- git -C "!BUILD_DIR!" init
- if errorlevel 1 exit /b 1
- )
- git -C "!BUILD_DIR!" fetch "!MIRROR_PATH!" "ref-!HASH!"
- if errorlevel 1 exit /b 2
- git -C "!BUILD_DIR!" checkout -f "!HASH!"
- if errorlevel 1 exit /b 1
- echo ">>> Git helper script finished."
- exit /b 0
-)
-exit /b 1
diff --git a/src/builder/scripts/git_helper.sh b/src/builder/scripts/git_helper.sh
deleted file mode 100644
index 99bd4e7..0000000
--- a/src/builder/scripts/git_helper.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/bash
-export PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin
-set -e
-echo "git_helper_sh: starting"
-OPERATION=$1
-shift
-if [ "$OPERATION" == "mirror" ]; then
- REMOTE_URL=$1
- REF=$2
- HASH=$3
- MIRROR_PATH="$HOME/git-mirror/$4"
- for i in $(seq 1 60); do
- if [ -d "$MIRROR_PATH/.git" ]; then
- if git -C "$MIRROR_PATH" rev-parse -q --verify "ref-$HASH" > /dev/null; then
- exit 0
- fi
- fi
- if mkdir "$MIRROR_PATH.lock" 2>/dev/null; then
- trap 'rm -rf "$MIRROR_PATH.lock"' EXIT
- if [ -d "$MIRROR_PATH/.git" ]; then
- if git -C "$MIRROR_PATH" rev-parse -q --verify "ref-$HASH" > /dev/null; then
- exit 0
- fi
- fi
- mkdir -p "$MIRROR_PATH"
- if [ ! -d "$MIRROR_PATH/.git" ]; then
- git init --bare "$MIRROR_PATH"
- fi
- REFSPEC="$REF:ref-$HASH"
- git -C "$MIRROR_PATH" fetch "$REMOTE_URL" "+$REFSPEC"
- exit 0
- fi
- echo "git mirror locked, waiting..."
- sleep 1
- done
- exit 1
-elif [ "$OPERATION" == "checkout" ]; then
- MIRROR_PATH="$HOME/git-mirror/$1"
- BUILD_DIR=$2
- HASH=$3
- if [ ! -d "$BUILD_DIR/.git" ]; then
- rm -rf "$BUILD_DIR"
- mkdir -p "$BUILD_DIR"
- git -C "$BUILD_DIR" init
- fi
- if ! git -C "$BUILD_DIR" fetch "$MIRROR_PATH" "ref-$HASH"; then
- exit 2
- fi
- git -C "$BUILD_DIR" checkout -f "$HASH"
- git -C "$BUILD_DIR" clean -fdx
-else
- exit 1
-fi
-echo ">>> Git helper script finished."
-exit 0
diff --git a/src/server/s-task.c b/src/server/s-task.c
index 3257566..1ee0e38 100644
--- a/src/server/s-task.c
+++ b/src/server/s-task.c
@@ -1201,23 +1201,23 @@ sais_continue_task(struct vhd *vhd, const char *task_uuid)
case 0: /* git mirror */
if (cb->windows)
lws_snprintf(task->script, sizeof(task->script),
- "git_helper.bat mirror \"%s\" %s %s %s",
+ ".\\git_helper.bat mirror \"%s\" %s %s %s",
task->git_repo_url, task->git_ref, task->git_hash,
mirror_path);
else
lws_snprintf(task->script, sizeof(task->script),
- "git_helper.sh mirror \"%s\" %s %s %s",
+ "./git_helper.sh mirror \"%s\" %s %s %s",
task->git_repo_url, task->git_ref, task->git_hash,
mirror_path);
break;
case 1: /* git checkout */
if (cb->windows)
lws_snprintf(task->script, sizeof(task->script),
- "git_helper.bat checkout \"%s\" src %s",
+ ".\\git_helper.bat checkout \"%s\" src %s",
mirror_path, task->git_hash);
else
lws_snprintf(task->script, sizeof(task->script),
- "git_helper.sh checkout \"%s\" src %s",
+ "./git_helper.sh checkout \"%s\" src %s",
mirror_path, task->git_hash);
break;
default: