Mercurial
annotate 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 |
| rev | line source |
|---|---|
|
249
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1 #!/usr/bin/env bash |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2 set -Eeuo pipefail |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4 script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
5 bundle_root="$(dirname "$script_dir")" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
6 repository="${HG_REPOSITORY_PATH:-$bundle_root/repository}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
7 hg_binary="$bundle_root/third_party/mercurial/runtime/bin/hg" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
8 server="$bundle_root/hg_web_server" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
9 hg_pid="" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
10 server_pid="" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
11 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
12 if [[ ! -x "$hg_binary" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
13 echo "Bundled Mercurial is unavailable: $hg_binary" >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
14 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
15 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
16 if [[ ! -x "$server" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
17 echo "hg-web server is unavailable: $server" >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
18 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
19 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
20 if [[ ! -d "$repository/.hg" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
21 echo "Mercurial repository snapshot is unavailable: $repository" >&2 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
22 exit 1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
23 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
24 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
25 cleanup() { |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
26 trap - EXIT INT TERM |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
27 for pid in "$server_pid" "$hg_pid"; do |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
28 if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
29 kill "$pid" 2>/dev/null || true |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
30 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
31 done |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
32 for pid in "$server_pid" "$hg_pid"; do |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
33 if [[ -n "$pid" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
34 wait "$pid" 2>/dev/null || true |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
35 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
36 done |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
37 } |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
38 trap cleanup EXIT |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
39 trap 'exit 130' INT TERM |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
40 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
41 hg_arguments=( |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
42 --repository "$repository" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
43 serve |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
44 --address 127.0.0.1 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
45 --port 4444 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
46 --accesslog - |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
47 --errorlog - |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
48 ) |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
49 if [[ "${HG_ALLOW_PUSH:-false}" == "true" ]]; then |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
50 echo "WARNING: Mercurial pushes are enabled; protect /repo in Nginx." |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
51 hg_arguments=( |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
52 --config "web.allow-push=*" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
53 --config "web.deny-push=" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
54 --config "web.push_ssl=false" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
55 "${hg_arguments[@]}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
56 ) |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
57 else |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
58 hg_arguments=( |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
59 --config "web.allow-push=" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
60 --config "web.deny-push=*" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
61 "${hg_arguments[@]}" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
62 ) |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
63 fi |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
64 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
65 export HGRCPATH= |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
66 "$hg_binary" "${hg_arguments[@]}" & |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
67 hg_pid=$! |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
68 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
69 ( |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
70 cd "$bundle_root" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
71 exec "$server" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
72 ) & |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
73 server_pid=$! |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
74 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
75 echo "hg-web: http://127.0.0.1:6970" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
76 echo "hg serve repository: $repository" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
77 |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
78 set +e |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
79 wait -n "$hg_pid" "$server_pid" |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
80 status=$? |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
81 set -e |
|
c5129452493e
[deploy] Bundle Mercurial with hg-web
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
82 exit "$status" |