go-deb/readControlFile.go

105 lines
2.4 KiB
Go
Raw Normal View History

package main
import (
"bufio"
"os"
"strings"
"go.wit.com/log"
)
// readGitConfig reads and parses the control file
func (c *controlBox) readControlFile() error {
2024-11-07 07:03:13 -06:00
pairs := make(map[string]string)
var key string
file, err := os.Open("control")
if err != nil {
log.Warn("readControlFile() could not find the file")
2024-11-07 07:03:13 -06:00
// 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
2024-11-07 07:03:13 -06:00
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":
2024-11-19 05:30:56 -06:00
c.Source.SetText(value)
case "Build-Depends":
c.BuildDepends.SetText(value)
case "Description":
c.Description.SetText(value)
case "Maintainer":
c.Maintainer.SetText(value)
2024-11-19 05:30:56 -06:00
case "Packager":
c.Packager.SetText(value)
2024-11-21 00:14:12 -06:00
case "GoPath":
c.GoPath.SetText(value)
2024-11-19 05:30:56 -06:00
case "URL":
c.URL.SetText(value)
case "Depends":
c.Depends.SetText(value)
case "Recommends":
c.Recommends.SetText(value)
2024-11-19 04:37:20 -06:00
case "Conflicts":
c.Conflicts.SetText(value)
2024-11-16 09:49:49 -06:00
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":
2024-11-16 11:00:46 -06:00
// todo: add logic to find OS arch
if c.Architecture.String() != value {
2024-11-16 11:00:46 -06:00
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
}