diff hg-web/run.sh @ 249:c5129452493e

[deploy] Bundle Mercurial with hg-web Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Tue, 04 Aug 2026 04:16:45 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hg-web/run.sh	Tue Aug 04 04:16:45 2026 -0700
@@ -0,0 +1,82 @@
+#!/usr/bin/env bash
+set -Eeuo pipefail
+
+script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+bundle_root="$(dirname "$script_dir")"
+repository="${HG_REPOSITORY_PATH:-$bundle_root/repository}"
+hg_binary="$bundle_root/third_party/mercurial/runtime/bin/hg"
+server="$bundle_root/hg_web_server"
+hg_pid=""
+server_pid=""
+
+if [[ ! -x "$hg_binary" ]]; then
+  echo "Bundled Mercurial is unavailable: $hg_binary" >&2
+  exit 1
+fi
+if [[ ! -x "$server" ]]; then
+  echo "hg-web server is unavailable: $server" >&2
+  exit 1
+fi
+if [[ ! -d "$repository/.hg" ]]; then
+  echo "Mercurial repository snapshot is unavailable: $repository" >&2
+  exit 1
+fi
+
+cleanup() {
+  trap - EXIT INT TERM
+  for pid in "$server_pid" "$hg_pid"; do
+    if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then
+      kill "$pid" 2>/dev/null || true
+    fi
+  done
+  for pid in "$server_pid" "$hg_pid"; do
+    if [[ -n "$pid" ]]; then
+      wait "$pid" 2>/dev/null || true
+    fi
+  done
+}
+trap cleanup EXIT
+trap 'exit 130' INT TERM
+
+hg_arguments=(
+  --repository "$repository"
+  serve
+  --address 127.0.0.1
+  --port 4444
+  --accesslog -
+  --errorlog -
+)
+if [[ "${HG_ALLOW_PUSH:-false}" == "true" ]]; then
+  echo "WARNING: Mercurial pushes are enabled; protect /repo in Nginx."
+  hg_arguments=(
+    --config "web.allow-push=*"
+    --config "web.deny-push="
+    --config "web.push_ssl=false"
+    "${hg_arguments[@]}"
+  )
+else
+  hg_arguments=(
+    --config "web.allow-push="
+    --config "web.deny-push=*"
+    "${hg_arguments[@]}"
+  )
+fi
+
+export HGRCPATH=
+"$hg_binary" "${hg_arguments[@]}" &
+hg_pid=$!
+
+(
+  cd "$bundle_root"
+  exec "$server"
+) &
+server_pid=$!
+
+echo "hg-web: http://127.0.0.1:6970"
+echo "hg serve repository: $repository"
+
+set +e
+wait -n "$hg_pid" "$server_pid"
+status=$?
+set -e
+exit "$status"