From e8a71dcf6d53157ab5a6f72dcba1faaa6e026f89 Mon Sep 17 00:00:00 2001 From: Mike Fridman Date: Mon, 13 Nov 2023 08:45:52 -0500 Subject: [PATCH] feat: Provider option to disable reading from global registry --- provider.go | 12 +++++++----- provider_options.go | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/provider.go b/provider.go index 41b22e2c9..e7870caeb 100644 --- a/provider.go +++ b/provider.go @@ -115,12 +115,14 @@ func newProvider( for version, m := range cfg.registered { versionToGoMigration[version] = m } - // Add globally registered Go migrations. - for version, m := range global { - if _, ok := versionToGoMigration[version]; ok { - return nil, fmt.Errorf("global go migration with version %d previously registered with provider", version) + // Do not add globally registered Go migrations if explicitly disabled. + if !cfg.disableGlobalRegistry { + for version, m := range global { + if _, ok := versionToGoMigration[version]; ok { + return nil, fmt.Errorf("global go migration with version %d previously registered with provider", version) + } + versionToGoMigration[version] = m } - versionToGoMigration[version] = m } // At this point we have all registered unique Go migrations (if any). We need to merge them // with SQL migrations from the filesystem. diff --git a/provider_options.go b/provider_options.go index 8e3fb2e8a..3f724652c 100644 --- a/provider_options.go +++ b/provider_options.go @@ -131,6 +131,15 @@ func WithGoMigrations(migrations ...*Migration) ProviderOption { }) } +// WithDisableGlobalRegistry prevents the provider from registering Go migrations from the global +// registry. By default, goose will register all Go migrations including those registered globally. +func WithDisableGlobalRegistry(b bool) ProviderOption { + return configFunc(func(c *config) error { + c.disableGlobalRegistry = b + return nil + }) +} + // WithAllowOutofOrder allows the provider to apply missing (out-of-order) migrations. By default, // goose will raise an error if it encounters a missing migration. // @@ -172,8 +181,9 @@ type config struct { sessionLocker lock.SessionLocker // Feature - disableVersioning bool - allowMissing bool + disableVersioning bool + allowMissing bool + disableGlobalRegistry bool } type configFunc func(*config) error