Restore strict migration ordering
This commit is contained in:
+6
-28
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user