mirror of
https://github.com/beego/bee.git
synced 2024-11-25 15:00:55 +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"
|
||||
"os"
|
||||
|
||||
"io"
|
||||
"path/filepath"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
@ -75,42 +78,58 @@ var conf struct {
|
||||
}
|
||||
|
||||
// loadConfig loads customized configuration.
|
||||
func loadConfig() error {
|
||||
foundConf := false
|
||||
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)
|
||||
func loadConfig() (err error) {
|
||||
err = filepath.Walk(".", func(path string, fileInfo os.FileInfo, err error) error {
|
||||
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
|
||||
}
|
||||
foundConf = true
|
||||
return io.EOF
|
||||
}
|
||||
byml, erryml := ioutil.ReadFile("Beefile")
|
||||
if erryml == nil {
|
||||
ColorLog("[INFO] Detected Beefile\n")
|
||||
err = yaml.Unmarshal(byml, &conf)
|
||||
|
||||
if fileInfo.Name() == "Beefile" {
|
||||
ColorLog("[INFO] Loading configuration from 'Beefile'...\n")
|
||||
err = parseYAML(path, conf)
|
||||
if err != nil {
|
||||
ColorLog("[ERRO] Failed to parse YAML file: %v\n", err)
|
||||
return err
|
||||
}
|
||||
foundConf = true
|
||||
return io.EOF
|
||||
}
|
||||
if !foundConf {
|
||||
// Use default.
|
||||
return nil
|
||||
})
|
||||
|
||||
// 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)
|
||||
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 {
|
||||
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")
|
||||
}
|
||||
|
||||
// Set variables.
|
||||
// Set variables
|
||||
if len(conf.DirStruct.Controllers) == 0 {
|
||||
conf.DirStruct.Controllers = "controllers"
|
||||
}
|
||||
@ -118,7 +137,39 @@ func loadConfig() error {
|
||||
conf.DirStruct.Models = "models"
|
||||
}
|
||||
|
||||
// Append watch exts.
|
||||
// Append watch exts
|
||||
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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user