Config: Always initialize fixtures, even when skipping migrations #3215

Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
Michael Mayer 2023-02-21 04:44:08 +01:00
parent 9054d8cf0f
commit 74772aea97
9 changed files with 23 additions and 18 deletions

View file

@ -177,7 +177,7 @@ func resetIndexDb(c *config.Config) {
tables.Drop(c.Db()) tables.Drop(c.Db())
log.Infoln("restoring default schema") log.Infoln("restoring default schema")
entity.InitDb(migrate.Opt(false, nil)) entity.InitDb(migrate.Opt(true, false, nil))
// Reset admin account? // Reset admin account?
if c.AdminPassword() == "" { if c.AdminPassword() == "" {

View file

@ -285,13 +285,9 @@ func (c *Config) MigrateDb(runFailed bool, ids []string) {
// Only migrate once automatically per version. // Only migrate once automatically per version.
version := migrate.FirstOrCreateVersion(c.Db(), migrate.NewVersion(c.Version(), c.Edition())) version := migrate.FirstOrCreateVersion(c.Db(), migrate.NewVersion(c.Version(), c.Edition()))
if version.NeedsMigration() || runFailed || len(ids) > 0 { entity.InitDb(migrate.Opt(version.NeedsMigration(), runFailed, ids))
entity.InitDb(migrate.Opt(runFailed, ids)) if err := version.Migrated(c.Db()); err != nil {
if err := version.Migrated(c.Db()); err != nil { log.Warnf("config: %s (migrate)", err)
log.Warnf("config: %s (migrate)", err)
}
} else {
log.Debugf("config: skipped migrations, already done")
} }
// Init admin account? // Init admin account?

View file

@ -346,7 +346,6 @@ func (m *User) CanLogIn() bool {
} else { } else {
return acl.Resources.Allow(acl.ResourceConfig, role, acl.AccessOwn) return acl.Resources.Allow(acl.ResourceConfig, role, acl.AccessOwn)
} }
} }
// CanUseWebDAV checks whether the user is allowed to use WebDAV to synchronize files. // CanUseWebDAV checks whether the user is allowed to use WebDAV to synchronize files.

View file

@ -20,7 +20,7 @@ func CreateDefaultFixtures() {
func ResetTestFixtures() { func ResetTestFixtures() {
start := time.Now() start := time.Now()
Entities.Migrate(Db(), migrate.Opt(false, nil)) Entities.Migrate(Db(), migrate.Opt(true, false, nil))
Entities.WaitForMigration(Db()) Entities.WaitForMigration(Db())
Entities.Truncate(Db()) Entities.Truncate(Db())

View file

@ -44,14 +44,14 @@ func TestMySQL8(t *testing.T) {
Entities.Drop(db) Entities.Drop(db)
// First migration. // First migration.
Entities.Migrate(db, migrate.Opt(false, nil)) Entities.Migrate(db, migrate.Opt(true, false, nil))
Entities.WaitForMigration(db) Entities.WaitForMigration(db)
// Second migration. // Second migration.
Entities.Migrate(db, migrate.Opt(false, nil)) Entities.Migrate(db, migrate.Opt(true, false, nil))
Entities.WaitForMigration(db) Entities.WaitForMigration(db)
// Third migration with force flag. // Third migration with force flag.
Entities.Migrate(db, migrate.Opt(false, []string{"20211121-094727"})) Entities.Migrate(db, migrate.Opt(true, false, []string{"20211121-094727"}))
Entities.WaitForMigration(db) Entities.WaitForMigration(db)
} }

View file

@ -43,7 +43,7 @@ func TestDialectMysql(t *testing.T) {
db.LogMode(false) db.LogMode(false)
db.SetLogger(log) db.SetLogger(log)
opt := Opt(true, nil) opt := Opt(true, true, nil)
// Run pre-migrations. // Run pre-migrations.
if err = Run(db, opt.Pre()); err != nil { if err = Run(db, opt.Pre()); err != nil {

View file

@ -52,7 +52,7 @@ func TestDialectSQLite3(t *testing.T) {
db.LogMode(false) db.LogMode(false)
db.SetLogger(log) db.SetLogger(log)
opt := Opt(true, nil) opt := Opt(true, true, nil)
// Run pre-migrations. // Run pre-migrations.
if err = Run(db, opt.Pre()); err != nil { if err = Run(db, opt.Pre()); err != nil {

View file

@ -10,8 +10,8 @@ type Options struct {
} }
// Opt returns migration options based on the specified parameters. // Opt returns migration options based on the specified parameters.
func Opt(runFailed bool, ids []string) Options { func Opt(runAll, runFailed bool, ids []string) Options {
runAll := len(ids) == 0 runAll = len(ids) == 0 && (runAll || runFailed)
return Options{ return Options{
AutoMigrate: runAll, AutoMigrate: runAll,
RunStage: StageMain, RunStage: StageMain,

View file

@ -37,7 +37,9 @@ var UnknownVersion = Version{
// NeedsMigration tests if the Version is not yet installed. // NeedsMigration tests if the Version is not yet installed.
func (m *Version) NeedsMigration() bool { func (m *Version) NeedsMigration() bool {
if m.MigratedAt == nil { if m == nil {
return true
} else if m.MigratedAt == nil || m.CreatedAt.IsZero() {
return true return true
} else if m.Unknown() { } else if m.Unknown() {
return true return true
@ -141,6 +143,12 @@ func (m *Version) String() string {
// Unknown checks if the version is unknown. // Unknown checks if the version is unknown.
func (m *Version) Unknown() bool { func (m *Version) Unknown() bool {
if m == nil {
return true
} else if m.Version == "" {
return true
}
return m.Version == UnknownVersion.Version return m.Version == UnknownVersion.Version
} }
@ -148,6 +156,8 @@ func (m *Version) Unknown() bool {
func (m *Version) CreateTable(db *gorm.DB) (err error) { func (m *Version) CreateTable(db *gorm.DB) (err error) {
if db == nil { if db == nil {
return fmt.Errorf("db is nil") return fmt.Errorf("db is nil")
} else if m == nil {
return fmt.Errorf("version is nil")
} }
versionOnce.Do(func() { versionOnce.Do(func() {