pinebook-imager/config.go

99 lines
2.4 KiB
Go
Raw Permalink Normal View History

package main
/*
This simply parses the command line arguments using the default golang
package called 'flag'. This can be used as a simple template to parse
command line arguments in other programs.
It puts everything in the 'config' package which I think is a good
wrapper around the 'flags' package and doesn't need a whole mess of
global variables
*/
import "log"
import "os"
import "flag"
import "fmt"
import "github.com/gookit/config"
import "github.com/gookit/config/yaml"
import "github.com/davecgh/go-spew/spew"
var customUsage = func() {
fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n", os.Args[0])
flag.PrintDefaults()
fmt.Println("")
fmt.Println("EXAMPLES:")
fmt.Println("")
fmt.Println(os.Args[0] + "--hostname test.hostname.wit.com")
fmt.Println("")
}
func parseFlags() {
var version string
var race bool
var hostname string
var width int
var height int
flag.StringVar (&version, "version", "v0.1", "Set compiled in version string")
flag.StringVar (&hostname, "hostname", "localhost", "Your full hostname")
flag.IntVar (&width, "width", 400, "Width of the Window")
flag.IntVar (&height, "height", 600, "Height of the Window")
flag.BoolVar (&race, "race", race, "Use race detector")
// Set the output if something fails to stdout rather than stderr
flag.CommandLine.SetOutput(os.Stdout)
flag.Usage = customUsage
flag.Parse()
if flag.Parsed() {
log.Println("flag.Parse() worked")
} else {
log.Println("flag.Parse() failed")
}
config.Set("width", width)
config.Set("height", height)
config.Set("hostname", hostname)
}
func parseConfig() {
config.WithOptions(config.ParseEnv)
parseFlags()
config.LoadOSEnv([]string{"MAIL"})
config.LoadOSEnv([]string{"USER"})
config.LoadOSEnv([]string{"BUILDDEBUG"})
/*
urls := flag.Args()
log.Println("flag.Aargs() = ", urls)
for _, addr := range flag.Args() {
log.Println("GET %s", addr)
}
*/
// add driver for support yaml content
config.AddDriver(yaml.Driver)
config.LoadFiles("config.yml")
map1 := config.StringMap("dists")
spew.Dump(map1)
for name, vars := range config.StringMap("dists") {
log.Println("name =", name)
log.Println("vars =", vars)
}
/*
for _, addr := range config.Strings("dists") {
log.Println("addr =", addr)
}
*/
}