1
0
out-of-tree/distro/debian/snapshot/snapshot.go

102 lines
1.6 KiB
Go

package snapshot
import (
"errors"
"regexp"
"code.dumpstack.io/tools/out-of-tree/distro/debian/snapshot/mr"
)
func SourcePackageVersions(name string) (versions []string, err error) {
pkg, err := mr.GetPackage(name)
if err != nil {
return
}
for _, res := range pkg.Result {
versions = append(versions, res.Version)
}
return
}
type Package struct {
Name string
Source string
Version string
Arch string
Binary struct {
Name string
Hash string
}
Repo struct {
Snapshot string
Archive string
}
}
func NewPackage(name, srcname, version, arch string) (p Package, err error) {
p.Name = name
p.Source = srcname
p.Version = version
p.Arch = arch
p.Binary.Hash, err = p.getHash()
if err != nil {
return
}
info, err := mr.GetInfo(p.Binary.Hash)
if err != nil {
return
}
p.Binary.Name = info.Result[0].Name
p.Repo.Archive = info.Result[0].ArchiveName
p.Repo.Snapshot = info.Result[0].FirstSeen
return
}
func (p Package) getHash() (hash string, err error) {
binfiles, err := mr.GetBinfiles(p.Name, p.Version)
if err != nil {
return
}
for _, res := range binfiles.Result {
if res.Architecture == p.Arch {
hash = res.Hash
return
}
}
err = errors.New("not found")
return
}
func Packages(srcname, version, arch, regex string) (pkgs []Package, err error) {
binpkgs, err := mr.GetBinpackages(srcname, version)
if err != nil {
return
}
r := regexp.MustCompile(regex)
for _, res := range binpkgs.Result {
if !r.MatchString(res.Name) {
continue
}
var pkg Package
pkg, err = NewPackage(res.Name, srcname, version, arch)
if err != nil {
return
}
pkgs = append(pkgs, pkg)
}
return
}