add tidb support

tokarchuk/v1.17
Unknwon 9 years ago
parent 10de16beb0
commit aff773f1b9
  1. 4
      .bra.toml
  2. 2
      conf/app.ini
  3. 7
      conf/locale/locale_en-US.ini
  4. 4
      models/models.go
  5. 2
      models/models_tidb.go
  6. 4
      modules/bindata/bindata.go
  7. 1
      modules/setting/setting.go
  8. 30
      routers/install.go
  9. 2
      templates/install.tmpl

@ -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.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.Data["Err_DbPath"] = true
ctx.RenderWithErr(ctx.Tr("install.err_empty_sqlite_path"), INSTALL, &form) 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…
Cancel
Save