package main import ( "bufio" "os" "strings" "go.wit.com/log" ) // readGitConfig reads and parses the control file func (c *controlBox) readControlFile() error { pairs := make(map[string]string) var key string file, err := os.Open("control") if err != nil { log.Warn("readControlFile() could not find the file") // return errors.New("'control': file not found") // if this happens, make up a fake control file pairs["Maintainer"] = "go-deb build" pairs["Architecture"] = "amd64" // TODO: figure this out pairs["Recommends"] = "" pairs["Source"] = "notsure" if argv.Repo == "" { pairs["Description"] = "put something here" } else { pairs["Description"] = argv.Repo } } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() // Skip empty lines and comments if line == "" || strings.HasPrefix(line, "#") || strings.HasPrefix(line, ";") { continue } // if line starts with a space, it's part of the last key if strings.HasPrefix(line, " ") { pairs[key] = pairs[key] + "\n" + strings.TrimSpace(line) continue } partsNew := strings.SplitN(line, ":", 2) if len(partsNew) < 2 { log.Warn("error on line:", line) continue } key = strings.TrimSpace(partsNew[0]) value := strings.TrimSpace(partsNew[1]) pairs[key] = value } for key, value := range pairs { switch key { case "Source": // log.Info("FOUND Source!", value) c.Source.SetText(value) case "Build-Depends": c.BuildDepends.SetText(value) case "Description": c.Description.SetText(value) case "Maintainer": c.Maintainer.SetText(value) case "Depends": c.Depends.SetText(value) case "Recommends": c.Recommends.SetText(value) case "Version": c.Version.SetText(value) case "Package": c.Package.SetText(value) // if c.Package.String() != value { // log.Warn("not sure what to do with Package", c.Package.String(), value) // } case "Architecture": // todo: add logic to find OS arch if c.Architecture.String() != value { log.Warn("attempting to set arch to", value) c.Architecture.SetText(value) } default: log.Warn("error unknown key", key, "value:", value) } } if err := scanner.Err(); err != nil { return err } return nil }