Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
    npro  
 Modern all-safe Rust Network Protocol library supporting h1, h2, h3, ws, wt sans-IO and with socket IO + tls
git clone https://npro.rs/repo/npro
Author[]Andy Green <andy@warmcat.com> 2025-08-15 05:49 UTC
Committer[]Andy Green <andy@warmcat.com> 2025-08-15 05:49 UTC
Tree67aa6d2bcf5ebbb314361a86c49d673c2b7cb456   Raw Patch
 
git: make other instances wait for first to finish with mirror
git: make other instances wait for first to finish with mirror

Co-developed-by: Gemini 2.5 Pro
diff --git a/src/builder/b-mirror.c b/src/builder/b-mirror.c index 5e4e768..6822da4 100644 --- a/src/builder/b-mirror.c +++ b/src/builder/b-mirror.c @@ -43,6 +43,16 @@ static const char * const git_helper_sh = " REF=$2\n" " HASH=$3\n" " MIRROR_PATH=$4\n" + " while ! mkdir \"$MIRROR_PATH.lock\" 2>/dev/null; do\n" + " echo \"git mirror locked, waiting...\"\n" + " sleep 1\n" + " done\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" @@ -85,20 +95,39 @@ static const char * const git_helper_bat = " 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 exit /b 1\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"
Page fetched 0s ago, creation time: 1ms (vhost etag hits: 0%, cache hits: 0%)