diff --git a/scripts/wm-cursor b/scripts/wm-cursor index d2c2300fb5..3c47da1179 100755 --- a/scripts/wm-cursor +++ b/scripts/wm-cursor @@ -111,7 +111,7 @@ SETTINGS # Extracts --features from args, exports CARGO_FEATURES, returns remaining args. # Usage: parse_features_flag "$@"; set -- "${remaining_args[@]}" -parse_features_flag() { +parse_flags() { remaining_args=() while (( $# )); do case $1 in @@ -127,6 +127,10 @@ parse_features_flag() { export CARGO_FEATURES=${1#--features=} shift ;; + --clone-db) + export WM_CLONE_DB=1 + shift + ;; *) remaining_args+=("$1") shift @@ -142,7 +146,7 @@ cmd_add() { ensure_tmux check_dev_db - parse_features_flag "$@" + parse_flags "$@" set -- "${remaining_args[@]}" # Snapshot worktree list before @@ -176,7 +180,7 @@ cmd_open() { ensure_tmux check_dev_db - parse_features_flag "$@" + parse_flags "$@" set -- "${remaining_args[@]}" # Write CARGO_FEATURES to .env.local if specified @@ -391,6 +395,7 @@ case ${1-} in print -u2 "" print -u2 "Options:" print -u2 " --features Cargo features for the backend (e.g. \"enterprise,parquet\")" + print -u2 " --clone-db Clone the main 'windmill' database instead of creating an empty one" exit 1 ;; esac diff --git a/scripts/worktree-env b/scripts/worktree-env index c2252754fa..7c600b120e 100755 --- a/scripts/worktree-env +++ b/scripts/worktree-env @@ -61,9 +61,17 @@ if command -v psql &>/dev/null; then if psql "$db_conn/postgres" -tc "SELECT 1 FROM pg_database WHERE datname = '${db_name}'" 2>/dev/null | grep -q 1; then echo "Database $db_name already exists" else - psql "$db_conn/postgres" -c "CREATE DATABASE ${db_name}" 2>/dev/null \ - && echo "Created database $db_name" \ - || echo "WARNING: Could not create database $db_name (is PostgreSQL running?)" >&2 + if [[ -n "${WM_CLONE_DB:-}" ]]; then + # Terminate active connections so CREATE DATABASE ... TEMPLATE works + psql "$db_conn/postgres" -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'windmill' AND pid <> pg_backend_pid();" 2>/dev/null || true + psql "$db_conn/postgres" -c "CREATE DATABASE ${db_name} TEMPLATE windmill" 2>/dev/null \ + && echo "Created database $db_name (template: windmill)" \ + || echo "WARNING: Could not create database $db_name from template windmill" >&2 + else + psql "$db_conn/postgres" -c "CREATE DATABASE ${db_name}" 2>/dev/null \ + && echo "Created database $db_name" \ + || echo "WARNING: Could not create database $db_name (is PostgreSQL running?)" >&2 + fi fi db_url="${db_conn}/${db_name}?sslmode=disable" # Run migrations against the new database