mirror of
				https://github.com/beego/bee.git
				synced 2025-11-03 23:03:27 +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:
		
				
					committed by
					
						
						Faissal Elamraoui
					
				
			
			
				
	
			
			
			
						parent
						
							4ff3cf5ce8
						
					
				
				
					commit
					440c5e967c
				
			
							
								
								
									
										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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user