Restore strict migration ordering

This commit is contained in:
acrogenesis
2026-08-29 22:42:33 -06:00
parent 4d697a063c
commit f91d2e5453
9 changed files with 110 additions and 156 deletions
+6 -28
View File
@@ -85,40 +85,18 @@ wait_for_pacman_transaction
mkdir -p "$STATE_DIR"
[[ -d $MIGRATIONS_DIR ]] || exit 0
deferred=()
while IFS=$'\t' read -r name file marker; do
while IFS=$'\t' read -r name file marker <&3; do
[[ -n $name ]] || continue
if [[ ! -f $marker ]]; then
echo -e "\e[32m\nRunning migration (${name%.sh})\e[0m"
defer_file=$(mktemp "$STATE_DIR/.defer.XXXXXX")
defer_token="$BASHPID-$RANDOM-$RANDOM"
migration_status=0
if OMARCHY_PATH="$OMARCHY_PATH" \
OMARCHY_MIGRATION_DEFER_FILE="$defer_file" \
OMARCHY_MIGRATION_DEFER_TOKEN="$defer_token" \
bash -euo pipefail "$file"; then
mkdir -p "$(dirname "$marker")"
touch "$marker"
else
migration_status=$?
if (( migration_status == 75 )) && [[ $(<"$defer_file") == "$defer_token" ]]; then
deferred+=("$name")
echo "Migration ${name%.sh} was deferred and will be retried later."
else
rm -f "$defer_file"
exit "$migration_status"
fi
fi
rm -f "$defer_file"
OMARCHY_PATH="$OMARCHY_PATH" bash -euo pipefail "$file" 3<&-
mkdir -p "$(dirname "$marker")"
touch "$marker"
fi
done < <(migration_entries)
done 3< <(migration_entries)
# Clear a login-time notification the user left sitting there and then resolved
# by running migrations some other way. The substring matches both the current
# and legacy notification titles.
if ((${#deferred[@]} == 0)); then
omarchy-notification-dismiss "Omarchy Migrations" >/dev/null 2>&1 || true
fi
omarchy-notification-dismiss "Omarchy Migrations" >/dev/null 2>&1 || true