Browse Source

Merge pull request #905 from phsmit/conf_on_cli

Add option to provide configuration file on command line
无闻 10 years ago
parent
commit
cd0ee35b3f
8 changed files with 37 additions and 13 deletions
  1. 4 0
      cmd/dump.go
  2. 6 1
      cmd/serve.go
  3. 7 1
      cmd/update.go
  4. 4 0
      cmd/web.go
  5. 2 2
      models/publickey.go
  6. 2 2
      models/repo.go
  7. 9 5
      modules/setting/setting.go
  8. 3 2
      routers/install.go

+ 4 - 0
cmd/dump.go

@@ -26,10 +26,14 @@ It can be used for backup and capture Gogs server image to send to maintainer`,
 	Action: runDump,
 	Flags: []cli.Flag{
 		cli.BoolFlag{"verbose, v", "show process details", ""},
+		cli.StringFlag{"config, c", "custom/conf/app.ini", "Configuration file", ""},
 	},
 }
 
 func runDump(ctx *cli.Context) {
+	if ctx.IsSet("config") {
+		setting.CustomConf = ctx.String("config")
+	}
 	setting.NewConfigContext()
 	models.LoadModelsConfig()
 	models.SetEngine()

+ 6 - 1
cmd/serve.go

@@ -27,7 +27,9 @@ var CmdServ = cli.Command{
 	Usage:       "This command should only be called by SSH shell",
 	Description: `Serv provide access auth for repositories`,
 	Action:      runServ,
-	Flags:       []cli.Flag{},
+	Flags: []cli.Flag{
+		cli.StringFlag{"config, c", "custom/conf/app.ini", "Configuration file", ""},
+	},
 }
 
 func setup(logPath string) {
@@ -83,6 +85,9 @@ func In(b string, sl map[string]models.AccessType) bool {
 }
 
 func runServ(k *cli.Context) {
+	if k.IsSet("config") {
+		setting.CustomConf = k.String("config")
+	}
 	setup("serv.log")
 
 	keys := strings.Split(os.Args[2], "-")

+ 7 - 1
cmd/update.go

@@ -11,6 +11,7 @@ import (
 
 	"github.com/gogits/gogs/models"
 	"github.com/gogits/gogs/modules/log"
+	"github.com/gogits/gogs/modules/setting"
 )
 
 var CmdUpdate = cli.Command{
@@ -18,10 +19,15 @@ var CmdUpdate = cli.Command{
 	Usage:       "This command should only be called by SSH shell",
 	Description: `Update get pushed info and insert into database`,
 	Action:      runUpdate,
-	Flags:       []cli.Flag{},
+	Flags: []cli.Flag{
+		cli.StringFlag{"config, c", "custom/conf/app.ini", "Configuration file", ""},
+	},
 }
 
 func runUpdate(c *cli.Context) {
+	if c.IsSet("config") {
+		setting.CustomConf = c.String("config")
+	}
 	cmd := os.Getenv("SSH_ORIGINAL_COMMAND")
 	if cmd == "" {
 		return

+ 4 - 0
cmd/web.go

@@ -55,6 +55,7 @@ and it takes care of all the other things for you`,
 	Action: runWeb,
 	Flags: []cli.Flag{
 		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) {
+	if ctx.IsSet("config") {
+		setting.CustomConf = ctx.String("config")
+	}
 	routers.GlobalInit()
 	checkVersion()
 

+ 2 - 2
models/publickey.go

@@ -29,7 +29,7 @@ import (
 
 const (
 	// "### 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 (
@@ -98,7 +98,7 @@ func (k *PublicKey) OmitEmail() string {
 
 // GetAuthorizedString generates and returns formatted public key string for authorized_keys file.
 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 (

+ 2 - 2
models/repo.go

@@ -30,7 +30,7 @@ import (
 )
 
 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 (
@@ -424,7 +424,7 @@ func initRepository(f string, u *User, repo *Repository, initReadme bool, repoLa
 
 	// hook/post-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
 	}
 

+ 9 - 5
modules/setting/setting.go

@@ -125,6 +125,7 @@ var (
 	Cfg          *ini.File
 	ConfRootPath string
 	CustomPath   string // Custom directory path.
+	CustomConf   string
 	ProdMode     bool
 	RunUser      string
 	IsWindows    bool
@@ -173,13 +174,16 @@ func NewConfigContext() {
 		CustomPath = path.Join(workDir, "custom")
 	}
 
-	cfgPath := path.Join(CustomPath, "conf/app.ini")
-	if com.IsFile(cfgPath) {
-		if err = Cfg.Append(cfgPath); err != nil {
-			log.Fatal(4, "Fail to load custom 'conf/app.ini': %v", err)
+	if len(CustomConf) == 0 {
+		CustomConf = path.Join(CustomPath, "conf/app.ini")
+	}
+
+	if com.IsFile(CustomConf) {
+		if err = Cfg.Append(CustomConf); err != nil {
+			log.Fatal(4, "Fail to load custom conf '%s': %v", CustomConf, err)
 		}
 	} 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
 

+ 3 - 2
routers/install.go

@@ -9,6 +9,7 @@ import (
 	"os"
 	"os/exec"
 	"path"
+	"path/filepath"
 	"strings"
 
 	"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("SECRET_KEY").SetValue(base.GetRandomString(15))
 
-	os.MkdirAll("custom/conf", os.ModePerm)
-	if err := cfg.SaveTo(path.Join(setting.CustomPath, "conf/app.ini")); err != nil {
+	os.MkdirAll(filepath.Dir(setting.CustomConf), os.ModePerm)
+	if err := cfg.SaveTo(setting.CustomConf); err != nil {
 		ctx.RenderWithErr(ctx.Tr("install.save_config_failed", err), INSTALL, &form)
 		return
 	}