Architecture parsing, package list from reflist.

This commit is contained in:
Andrey Smirnov
2014-01-09 14:18:37 +04:00
parent 4e2fce7251
commit f168feb9b8
3 changed files with 65 additions and 7 deletions
+31
View File
@@ -3,6 +3,7 @@ package debian
import (
"bytes"
"fmt"
"github.com/smira/aptly/utils"
"github.com/ugorji/go/codec"
"sort"
)
@@ -20,6 +21,25 @@ func NewPackageList() *PackageList {
return &PackageList{packages: make(map[string]*Package, 1000)}
}
// NewPackageListFromRefList loads packages list from PackageRefList
func NewPackageListFromRefList(reflist *PackageRefList, collection *PackageCollection) (*PackageList, error) {
result := &PackageList{packages: make(map[string]*Package, reflist.Len())}
err := reflist.ForEach(func(key []byte) error {
p, err := collection.ByKey(key)
if err != nil {
return fmt.Errorf("unable to load package with key %s: %s", key, err)
}
return result.Add(p)
})
if err != nil {
return nil, err
}
return result, nil
}
// Add appends package to package list, additionally checking for uniqueness
func (l *PackageList) Add(p *Package) error {
key := string(p.Key())
@@ -51,6 +71,17 @@ func (l *PackageList) Len() int {
return len(l.packages)
}
// Architectures returns list of architectures present in packages
func (l *PackageList) Architectures() (result []string) {
result = make([]string, 0, 10)
for _, pkg := range l.packages {
if pkg.Architecture != "all" && !utils.StrSliceHasItem(result, pkg.Architecture) {
result = append(result, pkg.Architecture)
}
}
return
}
// Dependency options
const (
// DepFollowSource pulls source packages when required