mirror of
https://github.com/beego/bee.git
synced 2024-11-22 10:10:53 +00:00
Rewrite configuration loading
Rewrited loadConfig() function to walk the project directory looking for bee.json and Beefile. If no configuration file found, it fallbacks to the default configuration. In case of an error, a log message is printed to the console.
This commit is contained in:
parent
4ff3cf5ce8
commit
440c5e967c
103
conf.go
103
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 err
|
return nil
|
||||||
}
|
}
|
||||||
foundConf = true
|
|
||||||
}
|
if fileInfo.IsDir() {
|
||||||
byml, erryml := ioutil.ReadFile("Beefile")
|
return nil
|
||||||
if erryml == nil {
|
|
||||||
ColorLog("[INFO] Detected Beefile\n")
|
|
||||||
err = yaml.Unmarshal(byml, &conf)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
foundConf = true
|
|
||||||
}
|
if fileInfo.Name() == "bee.json" {
|
||||||
if !foundConf {
|
ColorLog("[INFO] Loading configuration from 'bee.json'...\n")
|
||||||
// Use default.
|
err = parseJSON(path, conf)
|
||||||
|
if err != nil {
|
||||||
|
ColorLog("[ERRO] Failed to parse JSON file: %v\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return io.EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
return io.EOF
|
||||||
|
}
|
||||||
|
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)
|
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