From 3e2b055c887739c6be0c7cd5d27bf34cb39f3da8 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Thu, 4 Jun 2026 20:19:52 -0600 Subject: [PATCH] fix(sql-migrate): strip id\t prefix when parsing migrations.log parseAndFixupBatches treated every line as a migration name, but the new log format uses id\tname (tab-separated). This caused fixupMigration to look for non-existent files like '05aba66a\t2026-06-03-003000_team-create.up.sql'. Align with shmigrate.Applied() which already handles both formats. --- cmd/sql-migrate/main.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/cmd/sql-migrate/main.go b/cmd/sql-migrate/main.go index 804d91a..934c6b1 100644 --- a/cmd/sql-migrate/main.go +++ b/cmd/sql-migrate/main.go @@ -749,8 +749,20 @@ func (state *State) parseAndFixupBatches(text string) error { state.Lines = strings.Split(text, "\n") for i := range state.Lines { line := strings.TrimSpace(state.Lines[i]) - migration := commentStartRe.ReplaceAllString(line, "") + migration := line + // strip comments (before tab-split so trailing comments on data lines are handled) + migration = commentStartRe.ReplaceAllString(migration, "") migration = strings.TrimSpace(migration) + // strip leading id\t prefix from new log format (idname) + // ignore any additional tab-delimited fields for future-proofing + parts := strings.Split(migration, "\t") + if len(parts) >= 2 { + migration = parts[1] + } else if len(parts) == 1 { + migration = parts[0] + } else { + continue + } if migration != "" { up, down, warn, err := fixupMigration(state.MigrationsDir, migration) if warn != nil {