Add option to provide configuration file on command line
This commit is contained in:
parent
02c5bade0f
commit
1ab09e4f1b
8 changed files with 37 additions and 13 deletions
|
@ -26,10 +26,14 @@ It can be used for backup and capture Gogs server image to send to maintainer`,
|
||||||
Action: runDump,
|
Action: runDump,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
cli.BoolFlag{"verbose, v", "show process details", ""},
|
cli.BoolFlag{"verbose, v", "show process details", ""},
|
||||||
|
cli.StringFlag{"config, c", "custom/conf/app.ini", "Configuration file", ""},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func runDump(ctx *cli.Context) {
|
func runDump(ctx *cli.Context) {
|
||||||
|
if ctx.IsSet("config") {
|
||||||
|
setting.CustomConf = ctx.String("config")
|
||||||
|
}
|
||||||
setting.NewConfigContext()
|
setting.NewConfigContext()
|
||||||
models.LoadModelsConfig()
|
models.LoadModelsConfig()
|
||||||
models.SetEngine()
|
models.SetEngine()
|
||||||
|
|
|
@ -27,7 +27,9 @@ var CmdServ = cli.Command{
|
||||||
Usage: "This command should only be called by SSH shell",
|
Usage: "This command should only be called by SSH shell",
|
||||||
Description: `Serv provide access auth for repositories`,
|
Description: `Serv provide access auth for repositories`,
|
||||||
Action: runServ,
|
Action: runServ,
|
||||||
Flags: []cli.Flag{},
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{"config, c", "custom/conf/app.ini", "Configuration file", ""},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func setup(logPath string) {
|
func setup(logPath string) {
|
||||||
|
@ -77,6 +79,9 @@ func In(b string, sl map[string]models.AccessType) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func runServ(k *cli.Context) {
|
func runServ(k *cli.Context) {
|
||||||
|
if k.IsSet("config") {
|
||||||
|
setting.CustomConf = k.String("config")
|
||||||
|
}
|
||||||
setup("serv.log")
|
setup("serv.log")
|
||||||
|
|
||||||
keys := strings.Split(os.Args[2], "-")
|
keys := strings.Split(os.Args[2], "-")
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
|
|
||||||
"github.com/gogits/gogs/models"
|
"github.com/gogits/gogs/models"
|
||||||
"github.com/gogits/gogs/modules/log"
|
"github.com/gogits/gogs/modules/log"
|
||||||
|
"github.com/gogits/gogs/modules/setting"
|
||||||
)
|
)
|
||||||
|
|
||||||
var CmdUpdate = cli.Command{
|
var CmdUpdate = cli.Command{
|
||||||
|
@ -18,10 +19,15 @@ var CmdUpdate = cli.Command{
|
||||||
Usage: "This command should only be called by SSH shell",
|
Usage: "This command should only be called by SSH shell",
|
||||||
Description: `Update get pushed info and insert into database`,
|
Description: `Update get pushed info and insert into database`,
|
||||||
Action: runUpdate,
|
Action: runUpdate,
|
||||||
Flags: []cli.Flag{},
|
Flags: []cli.Flag{
|
||||||
|
cli.StringFlag{"config, c", "custom/conf/app.ini", "Configuration file", ""},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func runUpdate(c *cli.Context) {
|
func runUpdate(c *cli.Context) {
|
||||||
|
if c.IsSet("config") {
|
||||||
|
setting.CustomConf = c.String("config")
|
||||||
|
}
|
||||||
cmd := os.Getenv("SSH_ORIGINAL_COMMAND")
|
cmd := os.Getenv("SSH_ORIGINAL_COMMAND")
|
||||||
if cmd == "" {
|
if cmd == "" {
|
||||||
return
|
return
|
||||||
|
|
|
@ -55,6 +55,7 @@ and it takes care of all the other things for you`,
|
||||||
Action: runWeb,
|
Action: runWeb,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
cli.StringFlag{"port, p", "3000", "Temporary port number to prevent conflict", ""},
|
cli.StringFlag{"port, p", "3000", "Temporary port number to prevent conflict", ""},
|
||||||
|
cli.StringFlag{"config, c", "custom/conf/app.ini", "Configuration file", ""},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,6 +166,9 @@ func newMacaron() *macaron.Macaron {
|
||||||
}
|
}
|
||||||
|
|
||||||
func runWeb(ctx *cli.Context) {
|
func runWeb(ctx *cli.Context) {
|
||||||
|
if ctx.IsSet("config") {
|
||||||
|
setting.CustomConf = ctx.String("config")
|
||||||
|
}
|
||||||
routers.GlobalInit()
|
routers.GlobalInit()
|
||||||
checkVersion()
|
checkVersion()
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// "### autogenerated by gitgos, DO NOT EDIT\n"
|
// "### autogenerated by gitgos, DO NOT EDIT\n"
|
||||||
_TPL_PUBLICK_KEY = `command="%s serv key-%d",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty %s` + "\n"
|
_TPL_PUBLICK_KEY = `command="%s serv --config=%s key-%d",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty %s` + "\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -98,7 +98,7 @@ func (k *PublicKey) OmitEmail() string {
|
||||||
|
|
||||||
// GetAuthorizedString generates and returns formatted public key string for authorized_keys file.
|
// GetAuthorizedString generates and returns formatted public key string for authorized_keys file.
|
||||||
func (key *PublicKey) GetAuthorizedString() string {
|
func (key *PublicKey) GetAuthorizedString() string {
|
||||||
return fmt.Sprintf(_TPL_PUBLICK_KEY, appPath, key.Id, key.Content)
|
return fmt.Sprintf(_TPL_PUBLICK_KEY, appPath, setting.CustomConf, key.Id, key.Content)
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -30,7 +30,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
TPL_UPDATE_HOOK = "#!/usr/bin/env %s\n%s update $1 $2 $3\n"
|
TPL_UPDATE_HOOK = "#!/usr/bin/env %s\n%s update --config=%s $1 $2 $3\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -424,7 +424,7 @@ func initRepository(f string, u *User, repo *Repository, initReadme bool, repoLa
|
||||||
|
|
||||||
// hook/post-update
|
// hook/post-update
|
||||||
if err := createHookUpdate(filepath.Join(repoPath, "hooks", "update"),
|
if err := createHookUpdate(filepath.Join(repoPath, "hooks", "update"),
|
||||||
fmt.Sprintf(TPL_UPDATE_HOOK, setting.ScriptType, "\""+appPath+"\"")); err != nil {
|
fmt.Sprintf(TPL_UPDATE_HOOK, setting.ScriptType, "\""+appPath+"\"", setting.CustomConf)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,7 @@ var (
|
||||||
Cfg *ini.File
|
Cfg *ini.File
|
||||||
ConfRootPath string
|
ConfRootPath string
|
||||||
CustomPath string // Custom directory path.
|
CustomPath string // Custom directory path.
|
||||||
|
CustomConf string
|
||||||
ProdMode bool
|
ProdMode bool
|
||||||
RunUser string
|
RunUser string
|
||||||
IsWindows bool
|
IsWindows bool
|
||||||
|
@ -172,13 +173,16 @@ func NewConfigContext() {
|
||||||
CustomPath = path.Join(workDir, "custom")
|
CustomPath = path.Join(workDir, "custom")
|
||||||
}
|
}
|
||||||
|
|
||||||
cfgPath := path.Join(CustomPath, "conf/app.ini")
|
if len(CustomConf) == 0 {
|
||||||
if com.IsFile(cfgPath) {
|
CustomConf = path.Join(CustomPath, "conf/app.ini")
|
||||||
if err = Cfg.Append(cfgPath); err != nil {
|
}
|
||||||
log.Fatal(4, "Fail to load custom 'conf/app.ini': %v", err)
|
|
||||||
|
if com.IsFile(CustomConf) {
|
||||||
|
if err = Cfg.Append(CustomConf); err != nil {
|
||||||
|
log.Fatal(4, "Fail to load custom conf '%s': %v", CustomConf, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.Warn("No custom 'conf/app.ini' found, ignore this if you're running first time")
|
log.Warn("Custom config (%s) not found, ignore this if you're running first time", CustomConf)
|
||||||
}
|
}
|
||||||
Cfg.NameMapper = ini.AllCapsUnderscore
|
Cfg.NameMapper = ini.AllCapsUnderscore
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Unknwon/com"
|
"github.com/Unknwon/com"
|
||||||
|
@ -221,8 +222,8 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
|
||||||
cfg.Section("security").Key("INSTALL_LOCK").SetValue("true")
|
cfg.Section("security").Key("INSTALL_LOCK").SetValue("true")
|
||||||
cfg.Section("security").Key("SECRET_KEY").SetValue(base.GetRandomString(15))
|
cfg.Section("security").Key("SECRET_KEY").SetValue(base.GetRandomString(15))
|
||||||
|
|
||||||
os.MkdirAll("custom/conf", os.ModePerm)
|
os.MkdirAll(filepath.Dir(setting.CustomConf), os.ModePerm)
|
||||||
if err := cfg.SaveTo(path.Join(setting.CustomPath, "conf/app.ini")); err != nil {
|
if err := cfg.SaveTo(setting.CustomConf); err != nil {
|
||||||
ctx.RenderWithErr(ctx.Tr("install.save_config_failed", err), INSTALL, &form)
|
ctx.RenderWithErr(ctx.Tr("install.save_config_failed", err), INSTALL, &form)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue