fix: migrator

This commit is contained in:
2026-07-24 15:21:19 +04:00
parent e49f497045
commit 557b6e9ef0
2 changed files with 29 additions and 4 deletions
+21 -4
View File
@@ -434,6 +434,8 @@ migrate_down() {
target_migration=$(printf '%s' "$fs_migrations" | sed -n "${target_line}p") target_migration=$(printf '%s' "$fs_migrations" | sed -n "${target_line}p")
printf '%s' "$target_migration" printf '%s' "$target_migration"
fi fi
return 0
} }
migrate_up() { migrate_up() {
@@ -488,6 +490,7 @@ migrate_up() {
fi fi
printf '%s' "$target_migration" printf '%s' "$target_migration"
return 0
} }
migrate_to() { migrate_to() {
@@ -518,6 +521,8 @@ migrate_to() {
printf '%s' "$migration_name" printf '%s' "$migration_name"
;; ;;
esac esac
return 0
} }
migration_list() { migration_list() {
@@ -566,7 +571,10 @@ index_of() {
# no subshell, no pipeline # no subshell, no pipeline
while IFS= read -r m; do while IFS= read -r m; do
[ "$m" = "$name" ] && { printf '%s\n' "$i"; return 0; } if [ "$m" = "$name" ]; then
printf '%s\n' "$i"
return 0
fi
i=$((i+1)) i=$((i+1))
done <<EOF done <<EOF
$list $list
@@ -697,14 +705,20 @@ migrate() {
log info "Migration history validation: ${GREEN}OK${NC} (${WHITE}$i${NC} migrations match)" log info "Migration history validation: ${GREEN}OK${NC} (${WHITE}$i${NC} migrations match)"
eval "set -- $MIGRATOR_REMAINING_ARS" eval "set -- $MIGRATOR_REMAINING_ARS"
target_migration="$("migrate_$MIGRATE_SUBCOMMAND" "$@")" if ! target_migration="$("migrate_$MIGRATE_SUBCOMMAND" "$@")"; then
log error "failed to resolve migration target for ${WHITE}migrate $MIGRATE_SUBCOMMAND${NC}"
exit 1
fi
if [ -z "$db_migrations" ]; then if [ -z "$db_migrations" ]; then
log info "starting from clean migration state" log info "starting from clean migration state"
current_idx=0 current_idx=0
else else
current_migration=$(printf '%s\n' "$db_migrations" | tail -n1) current_migration=$(printf '%s\n' "$db_migrations" | tail -n1)
current_idx=$(index_of "$fs_migrations" "$current_migration") if ! current_idx=$(index_of "$fs_migrations" "$current_migration"); then
log error "current database migration is missing from filesystem: ${WHITE}$current_migration${NC}"
exit 2
fi
fi fi
log debug "filesystem migrations: ${WHITE}$fs_migrations${NC}" log debug "filesystem migrations: ${WHITE}$fs_migrations${NC}"
@@ -713,7 +727,10 @@ migrate() {
if [ -z "$target_migration" ]; then if [ -z "$target_migration" ]; then
target_idx=0 target_idx=0
else else
target_idx=$(index_of "$fs_migrations" "$target_migration") if ! target_idx=$(index_of "$fs_migrations" "$target_migration"); then
log error "target migration is missing from filesystem: ${WHITE}$target_migration${NC}"
exit 2
fi
fi fi
log debug "migration indexes: current=${WHITE}$current_idx${NC} target=${WHITE}$target_idx${NC}" log debug "migration indexes: current=${WHITE}$current_idx${NC} target=${WHITE}$target_idx${NC}"
@@ -24,6 +24,14 @@ if [ "$answer" -ne 4 ]; then
exit 1 exit 1
fi fi
log notice "test case: ${WHITE}unguarded assignment under errexit"
answer=$(index_of "$array" 'item4')
if [ "$answer" -ne 4 ]; then
log error "test failed: ${WHITE}wrong answer from unguarded assignment"
exit 1
fi
log notice "test case: ${WHITE}error: item not found" log notice "test case: ${WHITE}error: item not found"
if answer=$(index_of "$array" 'item10'); then if answer=$(index_of "$array" 'item10'); then
log error "test failed: ${WHITE} must return an error" log error "test failed: ${WHITE} must return an error"