105 lines
2.4 KiB
Go
105 lines
2.4 KiB
Go
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":
|
|
c.Source.SetText(value)
|
|
case "Build-Depends":
|
|
c.BuildDepends.SetText(value)
|
|
case "Description":
|
|
c.Description.SetText(value)
|
|
case "Maintainer":
|
|
c.Maintainer.SetText(value)
|
|
case "Packager":
|
|
c.Packager.SetText(value)
|
|
case "GoPath":
|
|
c.GoPath.SetText(value)
|
|
case "URL":
|
|
c.URL.SetText(value)
|
|
case "Depends":
|
|
c.Depends.SetText(value)
|
|
case "Recommends":
|
|
c.Recommends.SetText(value)
|
|
case "Conflicts":
|
|
c.Conflicts.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
|
|
}
|