diff options
| author | Jeff Carr <[email protected]> | 2025-09-11 19:08:15 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-11 19:08:15 -0500 |
| commit | 475e72018e18757026e50c1f80d71b630461b7ec (patch) | |
| tree | 8cbc6bebd3fdebca54bbd9b46ecc5ef59c093a0c /control.read.go | |
| parent | aedb5a3bef4eb587e56744837f528836986e9f92 (diff) | |
Diffstat (limited to 'control.read.go')
| -rw-r--r-- | control.read.go | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/control.read.go b/control.read.go new file mode 100644 index 0000000..d6a4c0d --- /dev/null +++ b/control.read.go @@ -0,0 +1,145 @@ +package main + +import ( + "bufio" + "os" + "path/filepath" + "strings" + "unicode" + + "go.wit.com/lib/protobuf/gitpb" + "go.wit.com/log" +) + +func trimNonNumericPrefix(s string) string { + // Find the index of the first character that IS a digit. + firstDigitIndex := strings.IndexFunc(s, unicode.IsDigit) + + // If no digit is found, IndexFunc returns -1. + // In this case, the result should be an empty string. + if firstDigitIndex == -1 { + return "" + } + + // Return the substring starting from the first digit. + return s[firstDigitIndex:] +} + +// readGitConfig reads and parses the control file +func readControlFile(repo *gitpb.Repo) 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["Architecture"] = "amd64" // TODO: figure this out + pairs["Recommends"] = "" + pairs["Source"] = "notsure" + if me.repo == nil { + pairs["Description"] = "put something here" + } else { + pairs["Description"] = me.repo.GetGoPath() + } + if repo.Control == nil { + repo.Control = make(map[string]string) + } + for key, value := range pairs { + repo.Control[key] = value + } + if os.Getenv("GIT_AUTHOR_NAME") != "" { + author := log.Sprintf("%s <%s>", os.Getenv("GIT_AUTHOR_NAME"), os.Getenv("GIT_AUTHOR_EMAIL")) + repo.Control["Packager"] = author + } + _, fname := filepath.Split(repo.GetFullPath()) + repo.Control["Package"] = fname + repo.Control["Version"] = trimNonNumericPrefix(repo.GetCurrentVersion()) + repo.Control["URL"] = repo.URL + return nil + } + defer file.Close() + + pairs["Version"] = trimNonNumericPrefix(repo.GetCurrentVersion()) + + 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 + } + if repo.Control == nil { + repo.Control = make(map[string]string) + } + for key, value := range pairs { + repo.Control[key] = value + /* + 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("the 'control' file has a value I don't know about") + log.Warn("error unknown key", key, "value:", value) + } + */ + } + pairs["Architecture"] = "amd64" // TODO: figure this out + + if err := scanner.Err(); err != nil { + return err + } + + return nil +} |
