Add option to provide configuration file on command line
This commit is contained in:
		
							parent
							
								
									02c5bade0f
								
							
						
					
					
						commit
						1ab09e4f1b
					
				| @ -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 | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user