mirror of
https://github.com/rclone/rclone.git
synced 2025-12-12 06:24:14 +01:00
testserver: make run.bash variables less likely to collide with scripts
This commit is contained in:
@@ -1,25 +1,25 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
BASE="${STATE_DIR:-${XDG_RUNTIME_DIR:-/tmp}/rclone-test-server}"
|
RUN_BASE="${STATE_DIR:-${XDG_RUNTIME_DIR:-/tmp}/rclone-test-server}"
|
||||||
: "${NAME:=$(basename "$0")}"
|
: "${NAME:=$(basename "$0")}"
|
||||||
ROOT="${BASE}/${NAME}"
|
RUN_ROOT="${RUN_BASE}/${NAME}"
|
||||||
STATE="${ROOT}/state"
|
RUN_STATE="${RUN_ROOT}/state"
|
||||||
LOCKF="${ROOT}/lock"
|
RUN_LOCK_FILE="${RUN_ROOT}/lock"
|
||||||
REFC="${STATE}/refcount"
|
RUN_REF_COUNT="${RUN_STATE}/refcount"
|
||||||
ENVF="${STATE}/env"
|
RUN_OUTPUT="${RUN_STATE}/env"
|
||||||
|
|
||||||
mkdir -p "${STATE}"
|
mkdir -p "${RUN_STATE}"
|
||||||
[[ -f "${REFC}" ]] || echo 0 >"${REFC}"
|
[[ -f "${RUN_REF_COUNT}" ]] || echo 0 >"${RUN_REF_COUNT}"
|
||||||
[[ -f "${ENVF}" ]] || : >"${ENVF}"
|
[[ -f "${RUN_OUTPUT}" ]] || : >"${RUN_OUTPUT}"
|
||||||
: > "${LOCKF}" # ensure file exists
|
: > "${RUN_LOCK_FILE}" # ensure file exists
|
||||||
|
|
||||||
# status helper that won't trip set -e
|
# status helper that won't trip set -e
|
||||||
_is_running() { set +e; status >/dev/null 2>&1; local rc=$?; set -e; return $rc; }
|
_is_running() { set +e; status >/dev/null 2>&1; local rc=$?; set -e; return $rc; }
|
||||||
|
|
||||||
_acquire_lock() {
|
_acquire_lock() {
|
||||||
# open fd 9 on lock file and take exclusive lock
|
# open fd 9 on lock file and take exclusive lock
|
||||||
exec 9>"${LOCKF}"
|
exec 9>"${RUN_LOCK_FILE}"
|
||||||
flock -x 9
|
flock -x 9
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ case "${1:-}" in
|
|||||||
_acquire_lock
|
_acquire_lock
|
||||||
trap '_release_lock' EXIT
|
trap '_release_lock' EXIT
|
||||||
|
|
||||||
rc=$(cat "${REFC}" 2>/dev/null || echo 0)
|
rc=$(cat "${RUN_REF_COUNT}" 2>/dev/null || echo 0)
|
||||||
|
|
||||||
if (( rc == 0 )); then
|
if (( rc == 0 )); then
|
||||||
# First client: ensure a clean instance, then start and cache env
|
# First client: ensure a clean instance, then start and cache env
|
||||||
@@ -44,7 +44,7 @@ case "${1:-}" in
|
|||||||
echo "failed to start" >&2
|
echo "failed to start" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
printf "%s\n" "$out" > "${ENVF}"
|
printf "%s\n" "$out" > "${RUN_OUTPUT}"
|
||||||
else
|
else
|
||||||
# Already owned: make sure it’s still up; if not, restart and refresh env
|
# Already owned: make sure it’s still up; if not, restart and refresh env
|
||||||
if ! _is_running; then
|
if ! _is_running; then
|
||||||
@@ -52,12 +52,12 @@ case "${1:-}" in
|
|||||||
echo "failed to restart" >&2
|
echo "failed to restart" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
printf "%s\n" "$out" > "${ENVF}"
|
printf "%s\n" "$out" > "${RUN_OUTPUT}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rc=$((rc+1)); echo "${rc}" > "${REFC}"
|
rc=$((rc+1)); echo "${rc}" > "${RUN_REF_COUNT}"
|
||||||
cat "${ENVF}"
|
cat "${RUN_OUTPUT}"
|
||||||
|
|
||||||
trap - EXIT
|
trap - EXIT
|
||||||
_release_lock
|
_release_lock
|
||||||
@@ -67,9 +67,9 @@ case "${1:-}" in
|
|||||||
_acquire_lock
|
_acquire_lock
|
||||||
trap '_release_lock' EXIT
|
trap '_release_lock' EXIT
|
||||||
|
|
||||||
rc=$(cat "${REFC}" 2>/dev/null || echo 0)
|
rc=$(cat "${RUN_REF_COUNT}" 2>/dev/null || echo 0)
|
||||||
if (( rc > 0 )); then rc=$((rc-1)); fi
|
if (( rc > 0 )); then rc=$((rc-1)); fi
|
||||||
echo "${rc}" > "${REFC}"
|
echo "${rc}" > "${RUN_REF_COUNT}"
|
||||||
if (( rc == 0 )) && _is_running; then
|
if (( rc == 0 )) && _is_running; then
|
||||||
stop || true
|
stop || true
|
||||||
fi
|
fi
|
||||||
@@ -83,7 +83,7 @@ case "${1:-}" in
|
|||||||
trap '_release_lock' EXIT
|
trap '_release_lock' EXIT
|
||||||
|
|
||||||
stop || true
|
stop || true
|
||||||
rm -rf "${BASE}"
|
rm -rf "${RUN_BASE}"
|
||||||
|
|
||||||
trap - EXIT
|
trap - EXIT
|
||||||
_release_lock
|
_release_lock
|
||||||
|
|||||||
Reference in New Issue
Block a user