#!/usr/bin/env sh # DEP-03: postgres and sqlite migration sets must have matching numbered pairs. set -eu ROOT="$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)" PG="$ROOT/migrations/postgres" SQL="$ROOT/migrations/sqlite" list_nums() { dir="$1" ls "$dir" 2>/dev/null | sed -n 's/^\([0-9]\{6\}\)_.*\.up\.sql$/\1/p' | sort -u } pg_nums="$(list_nums "$PG")" sql_nums="$(list_nums "$SQL")" if [ "$pg_nums" != "$sql_nums" ]; then echo "check-migrations-pair: postgres and sqlite migration numbers differ" >&2 echo "postgres only:" >&2 comm -23 <(printf '%s\n' "$pg_nums") <(printf '%s\n' "$sql_nums") >&2 || true echo "sqlite only:" >&2 comm -13 <(printf '%s\n' "$pg_nums") <(printf '%s\n' "$sql_nums") >&2 || true exit 1 fi for n in $pg_nums; do pg_up="$(ls "$PG"/${n}_*.up.sql 2>/dev/null | head -1)" sql_up="$(ls "$SQL"/${n}_*.up.sql 2>/dev/null | head -1)" if [ -z "$pg_up" ] || [ -z "$sql_up" ]; then echo "check-migrations-pair: missing .up.sql for $n" >&2 exit 1 fi pg_base="$(basename "$pg_up" .up.sql)" sql_base="$(basename "$sql_up" .up.sql)" if [ "$pg_base" != "$sql_base" ]; then echo "check-migrations-pair: name mismatch for $n: $pg_base vs $sql_base" >&2 exit 1 fi done echo "check-migrations-pair: ok ($PG and $SQL)"