return err
}
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
if !pwd.IsComplexEnough(c.String("password")) {
fmt.Fprintf(os.Stderr, "--name flag is deprecated. Use --username instead.\n")
}
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
}
func runListUsers(c *cli.Context) error {
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
return fmt.Errorf("You must provide the id, username or email of a user to delete")
}
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
}
func runRepoSyncReleases(_ *cli.Context) error {
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
}
func runRegenerateHooks(_ *cli.Context) error {
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
return repo_module.SyncRepositoryHooks(graceful.GetManager().ShutdownContext())
}
func runRegenerateKeys(_ *cli.Context) error {
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
return models.RewriteAllPublicKeys()
}
func runAddOauth(c *cli.Context) error {
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
return fmt.Errorf("--id flag is missing")
}
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
}
func runListAuth(c *cli.Context) error {
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
return fmt.Errorf("--id flag is missing")
}
- if err := initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(ctx); err != nil {
return err
}
package cmd
import (
+ "context"
"fmt"
"strings"
type (
authService struct {
- initDB func() error
+ initDB func(ctx context.Context) error
createLoginSource func(loginSource *login.Source) error
updateLoginSource func(loginSource *login.Source) error
getLoginSourceByID func(id int64) (*login.Source, error)
return err
}
- if err := a.initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := a.initDB(ctx); err != nil {
return err
}
// updateLdapBindDn updates a new LDAP via Bind DN authentication source.
func (a *authService) updateLdapBindDn(c *cli.Context) error {
- if err := a.initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := a.initDB(ctx); err != nil {
return err
}
return err
}
- if err := a.initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := a.initDB(ctx); err != nil {
return err
}
// updateLdapBindDn updates a new LDAP (simple auth) authentication source.
func (a *authService) updateLdapSimpleAuth(c *cli.Context) error {
- if err := a.initDB(); err != nil {
+ ctx, cancel := installSignals()
+ defer cancel()
+
+ if err := a.initDB(ctx); err != nil {
return err
}
package cmd
import (
+ "context"
"testing"
"code.gitea.io/gitea/models/login"
// Mock functions.
var createdLoginSource *login.Source
service := &authService{
- initDB: func() error {
+ initDB: func(context.Context) error {
return nil
},
createLoginSource: func(loginSource *login.Source) error {
// Mock functions.
var createdLoginSource *login.Source
service := &authService{
- initDB: func() error {
+ initDB: func(context.Context) error {
return nil
},
createLoginSource: func(loginSource *login.Source) error {
// Mock functions.
var updatedLoginSource *login.Source
service := &authService{
- initDB: func() error {
+ initDB: func(context.Context) error {
return nil
},
createLoginSource: func(loginSource *login.Source) error {
// Mock functions.
var updatedLoginSource *login.Source
service := &authService{
- initDB: func() error {
+ initDB: func(context.Context) error {
return nil
},
createLoginSource: func(loginSource *login.Source) error {
}
}
-func initDB() error {
- return initDBDisableConsole(false)
+func initDB(ctx context.Context) error {
+ return initDBDisableConsole(ctx, false)
}
-func initDBDisableConsole(disableConsole bool) error {
+func initDBDisableConsole(ctx context.Context, disableConsole bool) error {
setting.NewContext()
setting.InitDBConfig()
-
setting.NewXORMLogService(disableConsole)
- if err := db.InitEngine(); err != nil {
+ if err := db.InitEngine(ctx); err != nil {
return fmt.Errorf("models.SetEngine: %v", err)
}
return nil
}
func runConvert(ctx *cli.Context) error {
- if err := initDB(); err != nil {
+ stdCtx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(stdCtx); err != nil {
return err
}
setting.Cfg.Section("log").Key("XORM").SetValue(",")
setting.NewXORMLogService(!ctx.Bool("debug"))
- if err := db.InitEngine(); err != nil {
+ stdCtx, cancel := installSignals()
+ defer cancel()
+
+ if err := db.InitEngine(stdCtx); err != nil {
fmt.Println(err)
fmt.Println("Check if you are using the right config file. You can use a --config directive to specify one.")
return nil
log.DelNamedLogger("console")
log.DelNamedLogger(log.DEFAULT)
+ stdCtx, cancel := installSignals()
+ defer cancel()
+
// Now setup our own
logFile := ctx.String("log-file")
if !ctx.IsSet("log-file") {
logger := log.GetLogger("doctorouter")
defer logger.Close()
- return doctor.RunChecks(logger, ctx.Bool("fix"), checks)
+ return doctor.RunChecks(stdCtx, logger, ctx.Bool("fix"), checks)
}
}
setting.NewServices() // cannot access session settings otherwise
- err := db.InitEngine()
+ stdCtx, cancel := installSignals()
+ defer cancel()
+
+ err := db.InitEngine(stdCtx)
if err != nil {
return err
}
}
func runDumpRepository(ctx *cli.Context) error {
- if err := initDB(); err != nil {
+ stdCtx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(stdCtx); err != nil {
return err
}
}
func runMigrate(ctx *cli.Context) error {
- if err := initDB(); err != nil {
+ stdCtx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(stdCtx); err != nil {
return err
}
}
func runMigrateStorage(ctx *cli.Context) error {
- if err := initDB(); err != nil {
+ stdCtx, cancel := installSignals()
+ defer cancel()
+
+ if err := initDB(stdCtx); err != nil {
return err
}
return x.StoreEngine("InnoDB").Sync2(tables...)
}
-// InitInstallEngineWithMigration creates a new xorm.Engine for testing during install
-//
-// This function will cause the basic database schema to be created
-func InitInstallEngineWithMigration(ctx context.Context, migrateFunc func(*xorm.Engine) error) (err error) {
- x, err = NewEngine()
- if err != nil {
- return fmt.Errorf("failed to connect to database: %w", err)
- }
-
- x.SetMapper(names.GonicMapper{})
- x.SetLogger(NewXORMLogger(!setting.IsProd))
- x.ShowSQL(!setting.IsProd)
-
- x.SetDefaultContext(ctx)
-
- if err = x.Ping(); err != nil {
- return err
- }
-
- // We have to run migrateFunc here in case the user is re-running installation on a previously created DB.
- // If we do not then table schemas will be changed and there will be conflicts when the migrations run properly.
- //
- // Installation should only be being re-run if users want to recover an old database.
- // However, we should think carefully about should we support re-install on an installed instance,
- // as there may be other problems due to secret reinitialization.
- if err = migrateFunc(x); err != nil {
- return fmt.Errorf("migrate: %v", err)
- }
-
- return syncTables()
-}
-
// InitEngine sets the xorm.Engine
-func InitEngine() (err error) {
+func InitEngine(ctx context.Context) (err error) {
x, err = NewEngine()
if err != nil {
return fmt.Errorf("Failed to connect to database: %v", err)
x.SetMaxOpenConns(setting.Database.MaxOpenConns)
x.SetMaxIdleConns(setting.Database.MaxIdleConns)
x.SetConnMaxLifetime(setting.Database.ConnMaxLifetime)
+
+ DefaultContext = &Context{
+ Context: ctx,
+ e: x,
+ }
+ x.SetDefaultContext(ctx)
return nil
}
// that prevents the doctor from fixing anything in the database if the migration level
// is different from the expected value.
func InitEngineWithMigration(ctx context.Context, migrateFunc func(*xorm.Engine) error) (err error) {
- if err = InitEngine(); err != nil {
+ if err = InitEngine(ctx); err != nil {
return err
}
- DefaultContext = &Context{
- Context: ctx,
- e: x,
- }
-
- x.SetDefaultContext(ctx)
-
if err = x.Ping(); err != nil {
return err
}
+ // We have to run migrateFunc here in case the user is re-running installation on a previously created DB.
+ // If we do not then table schemas will be changed and there will be conflicts when the migrations run properly.
+ //
+ // Installation should only be being re-run if users want to recover an old database.
+ // However, we should think carefully about should we support re-install on an installed instance,
+ // as there may be other problems due to secret reinitialization.
if err = migrateFunc(x); err != nil {
return fmt.Errorf("migrate: %v", err)
}
package doctor
import (
+ "context"
"fmt"
"sort"
"strings"
}, v...)...)
}
-func initDBDisableConsole(disableConsole bool) error {
+func initDBDisableConsole(ctx context.Context, disableConsole bool) error {
setting.NewContext()
setting.InitDBConfig()
setting.NewXORMLogService(disableConsole)
- if err := db.InitEngine(); err != nil {
+ if err := db.InitEngine(ctx); err != nil {
return fmt.Errorf("models.SetEngine: %v", err)
}
return nil
var Checks []*Check
// RunChecks runs the doctor checks for the provided list
-func RunChecks(logger log.Logger, autofix bool, checks []*Check) error {
+func RunChecks(ctx context.Context, logger log.Logger, autofix bool, checks []*Check) error {
wrappedLogger := log.LevelLoggerLogger{
LevelLogger: &wrappedLevelLogger{logger},
}
if !dbIsInit && !check.SkipDatabaseInitialization {
// Only open database after the most basic configuration check
setting.EnableXORMLog = false
- if err := initDBDisableConsole(true); err != nil {
+ if err := initDBDisableConsole(ctx, true); err != nil {
logger.Error("Error whilst initializing the database: %v", err)
logger.Error("Check if you are using the right config file. You can use a --config directive to specify one.")
return nil
setting.Database.SSLMode = form.SSLMode
setting.Database.Charset = form.Charset
setting.Database.Path = form.DbPath
-
+ setting.Database.LogSQL = !setting.IsProd
setting.PasswordHashAlgo = form.PasswordAlgorithm
if (setting.Database.Type == "sqlite3") &&
}
// Set test engine.
- if err = db.InitInstallEngineWithMigration(ctx, migrations.Migrate); err != nil {
+ if err = db.InitEngineWithMigration(ctx, migrations.Migrate); err != nil {
if strings.Contains(err.Error(), `Unknown database type: sqlite3`) {
ctx.Data["Err_DbType"] = true
ctx.RenderWithErr(ctx.Tr("install.sqlite3_not_available", "https://docs.gitea.io/en-us/install-from-binary/"), tplInstall, &form)