From 8eeb23ce56bcb6ac4ee0354a6c847558586c9a46 Mon Sep 17 00:00:00 2001 From: Jannik Clausen Date: Tue, 14 Jun 2022 09:20:07 +0200 Subject: [PATCH] if enabled, check directory integrity early --- dialect/sql/schema/migrate.go | 22 +++++++++++----------- dialect/sql/schema/migrate_test.go | 5 ++++- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/dialect/sql/schema/migrate.go b/dialect/sql/schema/migrate.go index 52339b56aa..56929ff46e 100644 --- a/dialect/sql/schema/migrate.go +++ b/dialect/sql/schema/migrate.go @@ -176,6 +176,17 @@ func (m *Migrate) NamedDiff(ctx context.Context, name string, tables ...*Table) if m.atlas.dir == nil { return errors.New("no migration directory given") } + opts := []migrate.PlannerOption{ + migrate.WithFormatter(m.atlas.fmt), + } + if m.atlas.genSum { + // Validate the migration directory before proceeding. + if err := migrate.Validate(m.atlas.dir); err != nil { + return fmt.Errorf("validating migration directory: %w", err) + } + } else { + opts = append(opts, migrate.DisableChecksum()) + } if err := m.init(ctx, m); err != nil { return err } @@ -226,17 +237,6 @@ func (m *Migrate) NamedDiff(ctx context.Context, name string, tables ...*Table) if len(plan.Changes) == 0 { return nil } - opts := []migrate.PlannerOption{ - migrate.WithFormatter(m.atlas.fmt), - } - if m.atlas.genSum { - // Validate the migration directory before proceeding. - if err := migrate.Validate(m.atlas.dir); err != nil { - return fmt.Errorf("validating migration directory: %w", err) - } - } else { - opts = append(opts, migrate.DisableChecksum()) - } return migrate.NewPlanner(nil, m.atlas.dir, opts...).WritePlan(plan) } diff --git a/dialect/sql/schema/migrate_test.go b/dialect/sql/schema/migrate_test.go index ab03e4f8c7..e895f874f5 100644 --- a/dialect/sql/schema/migrate_test.go +++ b/dialect/sql/schema/migrate_test.go @@ -123,7 +123,7 @@ func TestMigrate_Diff(t *testing.T) { require.Contains(t, err.Error(), "WithGlobalUniqueID") require.Contains(t, err.Error(), "WithDir") - m, err = NewMigrate(db, WithFormatter(f), WithDir(d), WithDeterministicGlobalUniqueID()) + m, err = NewMigrate(db, WithFormatter(f), WithDir(d), WithDeterministicGlobalUniqueID(), WithSumFile()) require.NoError(t, err) require.IsType(t, &dirTypeStore{}, m.typeStore) require.NoError(t, m.Diff(context.Background(), @@ -153,6 +153,9 @@ func TestMigrate_Diff(t *testing.T) { fmt.Sprintf("INSERT INTO sqlite_sequence (name, seq) VALUES (\"pets\", %d);", 2<<32), "INSERT INTO `ent_types` (`type`) VALUES ('pets');", "", }, "\n")) + + // Checksum will be updated as well. + require.NoError(t, migrate.Validate(d)) } func requireFileEqual(t *testing.T, name, contents string) {