outsource MasterEngine retrieval into utility fun

This commit is contained in:
pat-s 2025-03-15 12:10:03 +01:00
parent 5faf339a1b
commit 9ee0a01acc
2 changed files with 21 additions and 7 deletions

View file

@ -20,7 +20,6 @@ import (
"code.gitea.io/gitea/services/doctor"
"github.com/urfave/cli/v2"
"xorm.io/xorm"
)
// CmdDoctor represents the available doctor sub-command.
@ -120,7 +119,7 @@ func runRecreateTable(ctx *cli.Context) error {
args := ctx.Args()
names := make([]string, 0, ctx.NArg())
for i := 0; i < ctx.NArg(); i++ {
for i := range ctx.NArg() {
names = append(names, args.Get(i))
}
@ -131,15 +130,15 @@ func runRecreateTable(ctx *cli.Context) error {
recreateTables := migrate_base.RecreateTables(beans...)
return db.InitEngineWithMigration(stdCtx, func(x db.Engine) error {
var engine *xorm.Engine
if getter, ok := x.(interface{ Master() *xorm.Engine }); ok {
engine = getter.Master()
} else {
engine = x.(*xorm.Engine)
engine, err := db.GetMasterEngine(x)
if err != nil {
return err
}
if err := migrations.EnsureUpToDate(engine); err != nil {
return err
}
return recreateTables(engine)
})
}

View file

@ -420,3 +420,18 @@ func (h *ErrorQueryHook) AfterProcess(c *contexts.ContextHook) error {
}
return nil
}
// GetMasterEngine extracts the master xorm.Engine from the provided xorm.Engine.
// This handles both direct xorm.Engine cases and engines that implement a Master() method.
func GetMasterEngine(x Engine) (*xorm.Engine, error) {
if getter, ok := x.(interface{ Master() *xorm.Engine }); ok {
return getter.Master(), nil
}
engine, ok := x.(*xorm.Engine)
if !ok {
return nil, fmt.Errorf("unsupported engine type: %T", x)
}
return engine, nil
}