add tidb support
parent
10de16beb0
commit
aff773f1b9
|
@ -13,7 +13,7 @@ watch_dirs = [
|
||||||
watch_exts = [".go"]
|
watch_exts = [".go"]
|
||||||
build_delay = 1500
|
build_delay = 1500
|
||||||
cmds = [
|
cmds = [
|
||||||
["go", "install", "-tags", "sqlite"],# redis memcache cert pam tidb
|
["go", "install", "-tags", "sqlite tidb"],# redis memcache cert pam
|
||||||
["go", "build", "-tags", "sqlite"],
|
["go", "build", "-tags", "sqlite tidb"],
|
||||||
["./gogs", "web"]
|
["./gogs", "web"]
|
||||||
]
|
]
|
|
@ -65,7 +65,7 @@ USER = root
|
||||||
PASSWD =
|
PASSWD =
|
||||||
; For "postgres" only, either "disable", "require" or "verify-full"
|
; For "postgres" only, either "disable", "require" or "verify-full"
|
||||||
SSL_MODE = disable
|
SSL_MODE = disable
|
||||||
; For "sqlite3" only
|
; For "sqlite3" and "tidb"
|
||||||
PATH = data/gogs.db
|
PATH = data/gogs.db
|
||||||
|
|
||||||
[admin]
|
[admin]
|
||||||
|
|
|
@ -65,7 +65,10 @@ db_helper = Please use INNODB engine with utf8_general_ci charset for MySQL.
|
||||||
ssl_mode = SSL Mode
|
ssl_mode = SSL Mode
|
||||||
path = Path
|
path = Path
|
||||||
sqlite_helper = The file path of SQLite3 database.
|
sqlite_helper = The file path of SQLite3 database.
|
||||||
err_empty_sqlite_path = SQLite3 database path cannot be empty.
|
err_empty_db_path = SQLite3 or TiDB database path cannot be empty.
|
||||||
|
err_invalid_tidb_name = TiDB database name does not allow characters "." and "-".
|
||||||
|
no_admin_and_disable_registration = You cannot disable registration without creating an admin account.
|
||||||
|
err_empty_admin_password = Admin password cannot be empty.
|
||||||
|
|
||||||
general_title = Application General Settings
|
general_title = Application General Settings
|
||||||
app_name = Application Name
|
app_name = Application Name
|
||||||
|
@ -868,7 +871,7 @@ config.db_user = User
|
||||||
config.db_ssl_mode = SSL Mode
|
config.db_ssl_mode = SSL Mode
|
||||||
config.db_ssl_mode_helper = (for "postgres" only)
|
config.db_ssl_mode_helper = (for "postgres" only)
|
||||||
config.db_path = Path
|
config.db_path = Path
|
||||||
config.db_path_helper = (for "sqlite3" only)
|
config.db_path_helper = (for "sqlite3" and "tidb")
|
||||||
config.service_config = Service Configuration
|
config.service_config = Service Configuration
|
||||||
config.register_email_confirm = Require E-mail Confirmation
|
config.register_email_confirm = Require E-mail Confirmation
|
||||||
config.disable_register = Disable Registration
|
config.disable_register = Disable Registration
|
||||||
|
|
|
@ -55,7 +55,7 @@ func regulateTimeZone(t time.Time) time.Time {
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
hour := com.StrTo(zone[2:3]).MustInt()
|
hour := com.StrTo(zone[2:3]).MustInt()
|
||||||
minutes := com.StrTo(zone[3:4]).MustInt()
|
minutes := com.StrTo(zone[3:5]).MustInt()
|
||||||
|
|
||||||
if zone[0] == '-' {
|
if zone[0] == '-' {
|
||||||
return t.Add(time.Duration(hour) * time.Hour).Add(time.Duration(minutes) * time.Minute)
|
return t.Add(time.Duration(hour) * time.Hour).Add(time.Duration(minutes) * time.Minute)
|
||||||
|
@ -104,6 +104,8 @@ func LoadModelsConfig() {
|
||||||
setting.UseMySQL = true
|
setting.UseMySQL = true
|
||||||
case "postgres":
|
case "postgres":
|
||||||
setting.UsePostgreSQL = true
|
setting.UsePostgreSQL = true
|
||||||
|
case "tidb":
|
||||||
|
setting.UseTiDB = true
|
||||||
}
|
}
|
||||||
DbCfg.Host = sec.Key("HOST").String()
|
DbCfg.Host = sec.Key("HOST").String()
|
||||||
DbCfg.Name = sec.Key("NAME").String()
|
DbCfg.Name = sec.Key("NAME").String()
|
||||||
|
|
|
@ -8,9 +8,11 @@ package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "github.com/go-xorm/tidb"
|
_ "github.com/go-xorm/tidb"
|
||||||
|
"github.com/ngaut/log"
|
||||||
_ "github.com/pingcap/tidb"
|
_ "github.com/pingcap/tidb"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
EnableTidb = true
|
EnableTidb = true
|
||||||
|
log.SetLevelByString("error")
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -75,6 +75,7 @@ var (
|
||||||
UseSQLite3 bool
|
UseSQLite3 bool
|
||||||
UseMySQL bool
|
UseMySQL bool
|
||||||
UsePostgreSQL bool
|
UsePostgreSQL bool
|
||||||
|
UseTiDB bool
|
||||||
|
|
||||||
// Webhook settings.
|
// Webhook settings.
|
||||||
Webhook struct {
|
Webhook struct {
|
||||||
|
|
|
@ -110,7 +110,11 @@ func Install(ctx *middleware.Context) {
|
||||||
ctx.Data["CurDbOption"] = "PostgreSQL"
|
ctx.Data["CurDbOption"] = "PostgreSQL"
|
||||||
case "sqlite3":
|
case "sqlite3":
|
||||||
if models.EnableSQLite3 {
|
if models.EnableSQLite3 {
|
||||||
ctx.Data["CurDbOption"] = "SQLite3" // Default when enabled.
|
ctx.Data["CurDbOption"] = "SQLite3"
|
||||||
|
}
|
||||||
|
case "tidb":
|
||||||
|
if models.EnableTidb {
|
||||||
|
ctx.Data["CurDbOption"] = "TiDB"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,9 +187,15 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
|
||||||
models.DbCfg.SSLMode = form.SSLMode
|
models.DbCfg.SSLMode = form.SSLMode
|
||||||
models.DbCfg.Path = form.DbPath
|
models.DbCfg.Path = form.DbPath
|
||||||
|
|
||||||
if models.DbCfg.Type == "sqlite3" && len(models.DbCfg.Path) == 0 {
|
if (models.DbCfg.Type == "sqlite3" || models.DbCfg.Type == "tidb") &&
|
||||||
|
len(models.DbCfg.Path) == 0 {
|
||||||
ctx.Data["Err_DbPath"] = true
|
ctx.Data["Err_DbPath"] = true
|
||||||
ctx.RenderWithErr(ctx.Tr("install.err_empty_sqlite_path"), INSTALL, &form)
|
ctx.RenderWithErr(ctx.Tr("install.err_empty_db_path"), INSTALL, &form)
|
||||||
|
return
|
||||||
|
} else if models.DbCfg.Type == "tidb" &&
|
||||||
|
strings.ContainsAny(path.Base(models.DbCfg.Path), ".-") {
|
||||||
|
ctx.Data["Err_DbPath"] = true
|
||||||
|
ctx.RenderWithErr(ctx.Tr("install.err_invalid_tidb_name"), INSTALL, &form)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +227,21 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check logic loophole between disable self-registration and no admin account.
|
||||||
|
if form.DisableRegistration && len(form.AdminName) == 0 {
|
||||||
|
ctx.Data["Err_Services"] = true
|
||||||
|
ctx.Data["Err_Admin"] = true
|
||||||
|
ctx.RenderWithErr(ctx.Tr("install.no_admin_and_disable_registration"), INSTALL, form)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Check admin password.
|
// Check admin password.
|
||||||
|
if len(form.AdminName) > 0 && len(form.AdminPasswd) == 0 {
|
||||||
|
ctx.Data["Err_Admin"] = true
|
||||||
|
ctx.Data["Err_AdminPasswd"] = true
|
||||||
|
ctx.RenderWithErr(ctx.Tr("install.err_empty_admin_password"), INSTALL, form)
|
||||||
|
return
|
||||||
|
}
|
||||||
if form.AdminPasswd != form.AdminConfirmPasswd {
|
if form.AdminPasswd != form.AdminConfirmPasswd {
|
||||||
ctx.Data["Err_Admin"] = true
|
ctx.Data["Err_Admin"] = true
|
||||||
ctx.Data["Err_AdminPasswd"] = true
|
ctx.Data["Err_AdminPasswd"] = true
|
||||||
|
|
|
@ -152,7 +152,7 @@
|
||||||
|
|
||||||
<!-- Server and other services -->
|
<!-- Server and other services -->
|
||||||
<div class="ui accordion optional field">
|
<div class="ui accordion optional field">
|
||||||
<div class="title">
|
<div class="title {{if .Err_Services}}text red{{end}}">
|
||||||
<i class="icon dropdown"></i>
|
<i class="icon dropdown"></i>
|
||||||
{{.i18n.Tr "install.server_service_title"}}
|
{{.i18n.Tr "install.server_service_title"}}
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue