github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/flags/loadflags/impl.go (about) 1 package loadflags 2 3 import ( 4 "bufio" 5 "errors" 6 "flag" 7 "os" 8 "path/filepath" 9 "strings" 10 ) 11 12 func loadFlags(dirname string) error { 13 err := loadFlagsFromFile(filepath.Join(dirname, "flags.default")) 14 if err != nil { 15 return err 16 } 17 return loadFlagsFromFile(filepath.Join(dirname, "flags.extra")) 18 } 19 20 func loadFlagsFromFile(filename string) error { 21 file, err := os.Open(filename) 22 if err != nil { 23 if os.IsNotExist(err) { 24 return nil 25 } 26 return err 27 } 28 scanner := bufio.NewScanner(file) 29 for scanner.Scan() { 30 line := strings.TrimSpace(scanner.Text()) 31 if len(line) < 1 { 32 continue 33 } 34 if line[0] == '#' || line[0] == ';' { 35 continue 36 } 37 splitLine := strings.SplitN(line, "=", 2) 38 if len(splitLine) < 2 { 39 return errors.New("bad line, cannot split name from value: " + line) 40 } 41 name := strings.TrimSpace(splitLine[0]) 42 if strings.Count(name, " ") != 0 { 43 return errors.New("bad line, name has whitespace: " + line) 44 } 45 value := strings.TrimSpace(splitLine[1]) 46 if err := flag.CommandLine.Set(name, value); err != nil { 47 return err 48 } 49 } 50 return scanner.Err() 51 }