mirror of
https://github.com/beego/bee.git
synced 2024-11-22 15:10:54 +00:00
Merge pull request #306 from amrfaissal/rewrite-load-conf
Rewrite configuration loading
This commit is contained in:
commit
dcc0fb67d2
93
conf.go
93
conf.go
@ -19,6 +19,9 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"io"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -75,42 +78,58 @@ var conf struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// loadConfig loads customized configuration.
|
// loadConfig loads customized configuration.
|
||||||
func loadConfig() error {
|
func loadConfig() (err error) {
|
||||||
foundConf := false
|
err = filepath.Walk(".", func(path string, fileInfo os.FileInfo, err error) error {
|
||||||
f, err := os.Open("bee.json")
|
|
||||||
if err == nil {
|
|
||||||
defer f.Close()
|
|
||||||
ColorLog("[INFO] Detected bee.json\n")
|
|
||||||
d := json.NewDecoder(f)
|
|
||||||
err = d.Decode(&conf)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if fileInfo.IsDir() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if fileInfo.Name() == "bee.json" {
|
||||||
|
ColorLog("[INFO] Loading configuration from 'bee.json'...\n")
|
||||||
|
err = parseJSON(path, conf)
|
||||||
|
if err != nil {
|
||||||
|
ColorLog("[ERRO] Failed to parse JSON file: %v\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
foundConf = true
|
return io.EOF
|
||||||
}
|
}
|
||||||
byml, erryml := ioutil.ReadFile("Beefile")
|
|
||||||
if erryml == nil {
|
if fileInfo.Name() == "Beefile" {
|
||||||
ColorLog("[INFO] Detected Beefile\n")
|
ColorLog("[INFO] Loading configuration from 'Beefile'...\n")
|
||||||
err = yaml.Unmarshal(byml, &conf)
|
err = parseYAML(path, conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
ColorLog("[ERRO] Failed to parse YAML file: %v\n", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
foundConf = true
|
return io.EOF
|
||||||
}
|
}
|
||||||
if !foundConf {
|
return nil
|
||||||
// Use default.
|
})
|
||||||
|
|
||||||
|
// In case no configuration file found or an error different than io.EOF,
|
||||||
|
// fallback to default configuration
|
||||||
|
if err != io.EOF {
|
||||||
|
ColorLog("[INFO] Loading default configuration...\n")
|
||||||
err = json.Unmarshal([]byte(defaultConf), &conf)
|
err = json.Unmarshal([]byte(defaultConf), &conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check format version.
|
|
||||||
|
// No need to return io.EOF error
|
||||||
|
err = nil
|
||||||
|
|
||||||
|
// Check format version
|
||||||
if conf.Version != ConfVer {
|
if conf.Version != ConfVer {
|
||||||
ColorLog("[WARN] Your bee.json is out-of-date, please update!\n")
|
ColorLog("[WARN] Your bee.json is outdated. Please do consider updating it.\n")
|
||||||
ColorLog("[HINT] Compare bee.json under bee source code path and yours\n")
|
ColorLog("[HINT] Compare bee.json under bee source code path and yours\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set variables.
|
// Set variables
|
||||||
if len(conf.DirStruct.Controllers) == 0 {
|
if len(conf.DirStruct.Controllers) == 0 {
|
||||||
conf.DirStruct.Controllers = "controllers"
|
conf.DirStruct.Controllers = "controllers"
|
||||||
}
|
}
|
||||||
@ -118,7 +137,39 @@ func loadConfig() error {
|
|||||||
conf.DirStruct.Models = "models"
|
conf.DirStruct.Models = "models"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append watch exts.
|
// Append watch exts
|
||||||
watchExts = append(watchExts, conf.WatchExt...)
|
watchExts = append(watchExts, conf.WatchExt...)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseJSON(path string, v interface{}) error {
|
||||||
|
var (
|
||||||
|
data []byte
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
data, err = ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(data, &v)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseYAML(path string, v interface{}) error {
|
||||||
|
var (
|
||||||
|
data []byte
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
data, err = ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = yaml.Unmarshal(data, &v)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
2
run.go
2
run.go
@ -115,7 +115,7 @@ func runApp(cmd *Command, args []string) int {
|
|||||||
|
|
||||||
err := loadConfig()
|
err := loadConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ColorLog("[ERRO] Fail to parse bee.json[ %s ]\n", err)
|
ColorLog("[ERRO] Failed to load configuration [ %s ]\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var paths []string
|
var paths []string
|
||||||
|
Loading…
Reference in New Issue
Block a user