121 lines
2.3 KiB
Go
121 lines
2.3 KiB
Go
|
package zoopb
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// sent via -ldflags
|
||
|
var VERSION string
|
||
|
var BUILDTIME string
|
||
|
|
||
|
// read the package list file from mirrors.wit.com
|
||
|
func (m *Machine) initWit() error {
|
||
|
err := m.scanPackageListFile("/var/lib/apt/lists/mirrors.wit.com_wit_dists_sid_main_binary-amd64_Packages")
|
||
|
return err
|
||
|
/*
|
||
|
for _, p := range allpackages {
|
||
|
var all []string
|
||
|
for _, ver := range p.versions {
|
||
|
all = append(all, ver.v)
|
||
|
}
|
||
|
// log.Info(name, strings.Join(all, ", "))
|
||
|
}
|
||
|
*/
|
||
|
}
|
||
|
|
||
|
// breaks up the apt list file into sections
|
||
|
// then sends each section to be processed
|
||
|
// and added to zoopb.Machine.Wit
|
||
|
func (m *Machine) scanPackageListFile(filename string) error {
|
||
|
file, err := os.Open(filename)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer file.Close()
|
||
|
scanner := bufio.NewScanner(file)
|
||
|
var debInfo string
|
||
|
for scanner.Scan() {
|
||
|
line := scanner.Text()
|
||
|
if line == "" {
|
||
|
p := parsePackageInfo(debInfo)
|
||
|
m.Wit.Append(p)
|
||
|
debInfo = ""
|
||
|
}
|
||
|
debInfo += line + "\n"
|
||
|
}
|
||
|
p := parsePackageInfo(debInfo)
|
||
|
m.Wit.Append(p)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
func (m *Machine) addPackage(name string, version string, filename string) {
|
||
|
if name == "" {
|
||
|
return
|
||
|
}
|
||
|
// log.Info("addPackage:", name, version, filename)
|
||
|
var deb *DebPackage
|
||
|
var ok bool
|
||
|
deb, ok = allp[name]
|
||
|
if !ok {
|
||
|
deb = NewPackage()
|
||
|
deb.name.SetLabel(name)
|
||
|
allp[name] = deb
|
||
|
}
|
||
|
newversion := new(Version)
|
||
|
newversion.v = version
|
||
|
newversion.file = filename
|
||
|
deb.versions = append(deb.versions, newversion)
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
// parses dpkg -s foo.deb
|
||
|
func parsePackageInfo(lines string) *Package {
|
||
|
var name string
|
||
|
var version string
|
||
|
var filename string
|
||
|
var gopath string
|
||
|
|
||
|
for _, line := range strings.Split(lines, "\n") {
|
||
|
if line == "" {
|
||
|
continue
|
||
|
}
|
||
|
if strings.HasPrefix(line, " ") {
|
||
|
// these are usually Description: lines
|
||
|
continue
|
||
|
}
|
||
|
if strings.HasPrefix(line, "#") {
|
||
|
// skip comment lines. (probably doesn't happen in debian list files
|
||
|
continue
|
||
|
}
|
||
|
line = strings.TrimSpace(line)
|
||
|
parts := strings.Split(line, " ")
|
||
|
if len(parts) < 2 {
|
||
|
continue
|
||
|
}
|
||
|
if parts[0] == "Package:" {
|
||
|
name = parts[1]
|
||
|
}
|
||
|
if parts[0] == "Version:" {
|
||
|
version = parts[1]
|
||
|
}
|
||
|
if parts[0] == "Filename:" {
|
||
|
filename = parts[1]
|
||
|
}
|
||
|
if parts[0] == "GoPath:" {
|
||
|
gopath = parts[1]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
p := Package{
|
||
|
Name: name,
|
||
|
Version: version,
|
||
|
PkgName: filename,
|
||
|
SrcPath: gopath,
|
||
|
}
|
||
|
|
||
|
return &p
|
||
|
}
|