github.com/Cloud-Foundations/Dominator@v0.3.4/lib/flags/loadflags/impl.go (about) 1 package loadflags 2 3 import ( 4 "bufio" 5 "errors" 6 "flag" 7 "fmt" 8 "os" 9 "path/filepath" 10 "strings" 11 ) 12 13 const systemDir = "/etc/config" 14 15 func loadFlags(dirname string) error { 16 err := loadFlagsFromFile(filepath.Join(dirname, "flags.default")) 17 if err != nil { 18 return err 19 } 20 return loadFlagsFromFile(filepath.Join(dirname, "flags.extra")) 21 } 22 23 func loadFlagsFromFile(filename string) error { 24 file, err := os.Open(filename) 25 if err != nil { 26 if os.IsNotExist(err) { 27 return nil 28 } 29 return err 30 } 31 scanner := bufio.NewScanner(file) 32 for scanner.Scan() { 33 line := strings.TrimSpace(scanner.Text()) 34 if len(line) < 1 { 35 continue 36 } 37 if line[0] == '#' || line[0] == ';' { 38 continue 39 } 40 splitLine := strings.SplitN(line, "=", 2) 41 if len(splitLine) < 2 { 42 return errors.New("bad line, cannot split name from value: " + line) 43 } 44 name := strings.TrimSpace(splitLine[0]) 45 if strings.Count(name, " ") != 0 { 46 return errors.New("bad line, name has whitespace: " + line) 47 } 48 value := strings.TrimSpace(splitLine[1]) 49 if err := flag.CommandLine.Set(name, value); err != nil { 50 return err 51 } 52 } 53 return scanner.Err() 54 } 55 56 func loadForCli(progName string) error { 57 if err := loadFlags(filepath.Join(systemDir, progName)); err != nil { 58 fmt.Fprintf(os.Stderr, "Warning: %s\n", err) 59 } 60 return loadFlags( 61 filepath.Join(os.Getenv("HOME"), ".config", progName)) 62 }