diff --git a/README.md b/README.md index e65c37b..eec9ef0 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,12 @@ Run the daemon: ./build/amduatd --root .amduat-asl --sock amduatd.sock ``` +Dev loop (build + restart): + +```sh +./scripts/dev-restart.sh +``` + Query store meta: ```sh diff --git a/scripts/dev-restart.sh b/scripts/dev-restart.sh new file mode 100755 index 0000000..e5ec8c0 --- /dev/null +++ b/scripts/dev-restart.sh @@ -0,0 +1,36 @@ +#!/bin/sh +set -eu + +ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +BUILD_DIR="$ROOT_DIR/build" +SOCK_PATH=${AMDUATD_SOCK:-"$ROOT_DIR/amduatd.sock"} +STORE_ROOT=${AMDUATD_ROOT:-"$ROOT_DIR/.amduat-asl"} + +if [ ! -d "$BUILD_DIR" ]; then + cmake -S "$ROOT_DIR" -B "$BUILD_DIR" +fi + +cmake --build "$BUILD_DIR" -j + +if [ -S "$SOCK_PATH" ]; then + pid= + if command -v lsof >/dev/null 2>&1; then + pid=$(lsof -t -- "$SOCK_PATH" 2>/dev/null | head -n 1 || true) + elif command -v fuser >/dev/null 2>&1; then + pid=$(fuser "$SOCK_PATH" 2>/dev/null | awk '{print $1}' | head -n 1 || true) + fi + + if [ -n "${pid:-}" ]; then + kill "$pid" 2>/dev/null || true + i=0 + while [ $i -lt 30 ] && kill -0 "$pid" 2>/dev/null; do + i=$((i + 1)) + sleep 0.1 + done + fi + + rm -f "$SOCK_PATH" +fi + +exec "$BUILD_DIR/amduatd" --root "$STORE_ROOT" --sock "$SOCK_PATH" +