dialect/sql/schema: respect sumfile when present and do not operate on checksum mismatch (#2522)

This commit is contained in:
MasseElch
2022-05-05 10:43:20 +02:00
committed by GitHub
parent 2fe8e053c1
commit 12b6659c72
2 changed files with 19 additions and 1 deletions

View File

@@ -187,7 +187,12 @@ func (m *Migrate) NamedDiff(ctx context.Context, name string, tables ...*Table)
opts := []migrate.PlannerOption{
migrate.WithFormatter(m.atlas.fmt),
}
if !m.atlas.genSum {
if m.atlas.genSum {
// Validate the migration directory before proceeding.
if err := migrate.Validate(m.atlas.dir); err != nil {
return err
}
} else {
opts = append(opts, migrate.DisableChecksum())
}
return migrate.NewPlanner(nil, m.atlas.dir, opts...).WritePlan(plan)

View File

@@ -84,6 +84,19 @@ func TestMigrate_Diff(t *testing.T) {
requireFileEqual(t, filepath.Join(p, v+"_changes.up.sql"), "-- create \"users\" table\nCREATE TABLE `users` (, PRIMARY KEY ());\n")
requireFileEqual(t, filepath.Join(p, v+"_changes.down.sql"), "-- reverse: create \"users\" table\nDROP TABLE `users`;\n")
require.NoFileExists(t, filepath.Join(p, "atlas.sum"))
// Test integrity file.
p = t.TempDir()
d, err = migrate.NewLocalDir(p)
require.NoError(t, err)
m, err = NewMigrate(db, WithDir(d), WithSumFile())
require.NoError(t, err)
require.NoError(t, m.Diff(context.Background(), &Table{Name: "users"}))
requireFileEqual(t, filepath.Join(p, v+"_changes.up.sql"), "-- create \"users\" table\nCREATE TABLE `users` (, PRIMARY KEY ());\n")
requireFileEqual(t, filepath.Join(p, v+"_changes.down.sql"), "-- reverse: create \"users\" table\nDROP TABLE `users`;\n")
require.FileExists(t, filepath.Join(p, "atlas.sum"))
require.NoError(t, d.WriteFile("tmp.sql", nil))
require.ErrorIs(t, m.Diff(context.Background(), &Table{Name: "users"}), migrate.ErrChecksumMismatch)
}
func requireFileEqual(t *testing.T, name, contents string) {