aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2021-12-01 15:50:01 +0800
committerGitHub <noreply@github.com>2021-12-01 15:50:01 +0800
commit042cac5fedeec8af53080b9666fe043072f3a6be (patch)
treeb13d57faa71ba8bc9f8b3d40f5be7e3735ac66a4 /cmd
parenta3517d8668482b58cb80ba10a956fe4e27e1a429 (diff)
downloadgitea-042cac5fedeec8af53080b9666fe043072f3a6be.tar.gz
gitea-042cac5fedeec8af53080b9666fe043072f3a6be.zip
Improve install code to avoid low-level mistakes. (#17779)
* Improve install code to avoid low-level mistakes. If a user tries to do a re-install in a Gitea database, they gets a warning and double check. When Gitea runs, it never create empty app.ini automatically. Also some small (related) refactoring: * Refactor db.InitEngine related logic make it more clean (especially for the install code) * Move some i18n strings out from setting.go to make the setting.go can be easily maintained. * Show errors in CLI code if an incorrect app.ini is used. * APP_DATA_PATH is created when installing, and checked when starting (no empty directory is created any more).
Diffstat (limited to 'cmd')
-rw-r--r--cmd/cmd.go17
-rw-r--r--cmd/convert.go1
-rw-r--r--cmd/doctor.go2
-rw-r--r--cmd/dump.go3
-rw-r--r--cmd/dump_repo.go1
-rw-r--r--cmd/embedded.go2
-rw-r--r--cmd/mailer.go2
-rw-r--r--cmd/migrate.go1
-rw-r--r--cmd/migrate_storage.go1
-rw-r--r--cmd/restore_repo.go2
-rw-r--r--cmd/serv.go2
-rw-r--r--cmd/web.go14
12 files changed, 30 insertions, 18 deletions
diff --git a/cmd/cmd.go b/cmd/cmd.go
index b89dd5d8b8..fd713b9aff 100644
--- a/cmd/cmd.go
+++ b/cmd/cmd.go
@@ -16,6 +16,7 @@ import (
"syscall"
"code.gitea.io/gitea/models/db"
+ "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
@@ -57,15 +58,17 @@ func confirm() (bool, error) {
}
func initDB(ctx context.Context) error {
- return initDBDisableConsole(ctx, false)
-}
-
-func initDBDisableConsole(ctx context.Context, disableConsole bool) error {
- setting.NewContext()
+ setting.LoadFromExisting()
setting.InitDBConfig()
- setting.NewXORMLogService(disableConsole)
+ setting.NewXORMLogService(false)
+
+ if setting.Database.Type == "" {
+ log.Fatal(`Database settings are missing from the configuration file: %q.
+Ensure you are running in the correct environment or set the correct configuration file with -c.
+If this is the intended configuration file complete the [database] section.`, setting.CustomConf)
+ }
if err := db.InitEngine(ctx); err != nil {
- return fmt.Errorf("models.SetEngine: %v", err)
+ return fmt.Errorf("unable to initialise the database using the configuration in %q. Error: %v", setting.CustomConf, err)
}
return nil
}
diff --git a/cmd/convert.go b/cmd/convert.go
index 0b2e240b32..6d4d99a255 100644
--- a/cmd/convert.go
+++ b/cmd/convert.go
@@ -35,7 +35,6 @@ func runConvert(ctx *cli.Context) error {
log.Info("Custom path: %s", setting.CustomPath)
log.Info("Log path: %s", setting.LogRootPath)
log.Info("Configuration file: %s", setting.CustomConf)
- setting.InitDBConfig()
if !setting.Database.UseMySQL {
fmt.Println("This command can only be used with a MySQL database")
diff --git a/cmd/doctor.go b/cmd/doctor.go
index 27f91e41bb..54c18b83dc 100644
--- a/cmd/doctor.go
+++ b/cmd/doctor.go
@@ -87,7 +87,7 @@ func runRecreateTable(ctx *cli.Context) error {
golog.SetPrefix("")
golog.SetOutput(log.NewLoggerAsWriter("INFO", log.GetLogger(log.DEFAULT)))
- setting.NewContext()
+ setting.LoadFromExisting()
setting.InitDBConfig()
setting.EnableXORMLog = ctx.Bool("debug")
diff --git a/cmd/dump.go b/cmd/dump.go
index efb9397208..c158ee21f1 100644
--- a/cmd/dump.go
+++ b/cmd/dump.go
@@ -159,7 +159,8 @@ func runDump(ctx *cli.Context) error {
fatal("Deleting default logger failed. Can not write to stdout: %v", err)
}
}
- setting.NewContext()
+ setting.LoadFromExisting()
+
// make sure we are logging to the console no matter what the configuration tells us do to
if _, err := setting.Cfg.Section("log").NewKey("MODE", "console"); err != nil {
fatal("Setting logging mode to console failed: %v", err)
diff --git a/cmd/dump_repo.go b/cmd/dump_repo.go
index 31f4574c2d..1a9344dbe1 100644
--- a/cmd/dump_repo.go
+++ b/cmd/dump_repo.go
@@ -88,7 +88,6 @@ func runDumpRepository(ctx *cli.Context) error {
log.Info("Custom path: %s", setting.CustomPath)
log.Info("Log path: %s", setting.LogRootPath)
log.Info("Configuration file: %s", setting.CustomConf)
- setting.InitDBConfig()
var (
serviceType structs.GitServiceType
diff --git a/cmd/embedded.go b/cmd/embedded.go
index 2aeaba4786..c608667bf8 100644
--- a/cmd/embedded.go
+++ b/cmd/embedded.go
@@ -115,7 +115,7 @@ func initEmbeddedExtractor(c *cli.Context) error {
log.DelNamedLogger(log.DEFAULT)
// Read configuration file
- setting.NewContext()
+ setting.LoadAllowEmpty()
pats, err := getPatterns(c.Args())
if err != nil {
diff --git a/cmd/mailer.go b/cmd/mailer.go
index a3d6baaa27..35fcb302f8 100644
--- a/cmd/mailer.go
+++ b/cmd/mailer.go
@@ -18,7 +18,7 @@ func runSendMail(c *cli.Context) error {
ctx, cancel := installSignals()
defer cancel()
- setting.NewContext()
+ setting.LoadFromExisting()
if err := argsSet(c, "title"); err != nil {
return err
diff --git a/cmd/migrate.go b/cmd/migrate.go
index 054772d9ec..49a13adeb5 100644
--- a/cmd/migrate.go
+++ b/cmd/migrate.go
@@ -36,7 +36,6 @@ func runMigrate(ctx *cli.Context) error {
log.Info("Custom path: %s", setting.CustomPath)
log.Info("Log path: %s", setting.LogRootPath)
log.Info("Configuration file: %s", setting.CustomConf)
- setting.InitDBConfig()
if err := db.InitEngineWithMigration(context.Background(), migrations.Migrate); err != nil {
log.Fatal("Failed to initialize ORM engine: %v", err)
diff --git a/cmd/migrate_storage.go b/cmd/migrate_storage.go
index afb0fc02a3..f8e2378cac 100644
--- a/cmd/migrate_storage.go
+++ b/cmd/migrate_storage.go
@@ -121,7 +121,6 @@ func runMigrateStorage(ctx *cli.Context) error {
log.Info("Custom path: %s", setting.CustomPath)
log.Info("Log path: %s", setting.LogRootPath)
log.Info("Configuration file: %s", setting.CustomConf)
- setting.InitDBConfig()
if err := db.InitEngineWithMigration(context.Background(), migrations.Migrate); err != nil {
log.Fatal("Failed to initialize ORM engine: %v", err)
diff --git a/cmd/restore_repo.go b/cmd/restore_repo.go
index 1208796c9b..357bd92c77 100644
--- a/cmd/restore_repo.go
+++ b/cmd/restore_repo.go
@@ -50,7 +50,7 @@ func runRestoreRepository(c *cli.Context) error {
ctx, cancel := installSignals()
defer cancel()
- setting.NewContext()
+ setting.LoadFromExisting()
statusCode, errStr := private.RestoreRepo(
ctx,
diff --git a/cmd/serv.go b/cmd/serv.go
index e1a1d4cb72..e34e300cbe 100644
--- a/cmd/serv.go
+++ b/cmd/serv.go
@@ -58,7 +58,7 @@ func setup(logPath string, debug bool) {
} else {
_ = log.NewLogger(1000, "console", "console", `{"level":"fatal","stacktracelevel":"NONE","stderr":true}`)
}
- setting.NewContext()
+ setting.LoadFromExisting()
if debug {
setting.RunMode = "dev"
}
diff --git a/cmd/web.go b/cmd/web.go
index 4b6dfa71a2..fbd62191a6 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -124,6 +124,10 @@ func runWeb(ctx *cli.Context) error {
}
c := install.Routes()
err := listen(c, false)
+ if err != nil {
+ log.Critical("Unable to open listener for installer. Is Gitea already running?")
+ graceful.GetManager().DoGracefulShutdown()
+ }
select {
case <-graceful.GetManager().IsShutdown():
<-graceful.GetManager().Done()
@@ -145,7 +149,15 @@ func runWeb(ctx *cli.Context) error {
log.Info("Global init")
// Perform global initialization
- routers.GlobalInit(graceful.GetManager().HammerContext())
+ setting.LoadFromExisting()
+ routers.GlobalInitInstalled(graceful.GetManager().HammerContext())
+
+ // We check that AppDataPath exists here (it should have been created during installation)
+ // We can't check it in `GlobalInitInstalled`, because some integration tests
+ // use cmd -> GlobalInitInstalled, but the AppDataPath doesn't exist during those tests.
+ if _, err := os.Stat(setting.AppDataPath); err != nil {
+ log.Fatal("Can not find APP_DATA_PATH '%s'", setting.AppDataPath)
+ }
// Override the provided port number within the configuration
if ctx.IsSet("port") {