mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-05-06 22:18:28 +00:00
Merge branch 'simonaquino-pull_multiple_packages'
This commit is contained in:
+35
-27
@@ -18,6 +18,7 @@ func aptlySnapshotPull(cmd *commander.Command, args []string) error {
|
||||
|
||||
noDeps := context.flags.Lookup("no-deps").Value.Get().(bool)
|
||||
noRemove := context.flags.Lookup("no-remove").Value.Get().(bool)
|
||||
allMatches := context.flags.Lookup("all-matches").Value.Get().(bool)
|
||||
|
||||
// Load <name> snapshot
|
||||
snapshot, err := context.CollectionFactory().SnapshotCollection().ByName(args[0])
|
||||
@@ -97,51 +98,57 @@ func aptlySnapshotPull(cmd *commander.Command, args []string) error {
|
||||
dep := dependencies[i]
|
||||
|
||||
// Search for package that can satisfy dependencies
|
||||
pkg := sourcePackageList.Search(dep)
|
||||
if pkg == nil {
|
||||
searchResults := sourcePackageList.Search(dep, allMatches)
|
||||
if searchResults == nil {
|
||||
context.Progress().ColoredPrintf("@y[!]@| @!Dependency %s can't be satisfied with source %s@|", &dep, source)
|
||||
continue
|
||||
}
|
||||
|
||||
if !noRemove {
|
||||
// Remove all packages with the same name and architecture
|
||||
for p := packageList.Search(deb.Dependency{Architecture: pkg.Architecture, Pkg: pkg.Name}); p != nil; {
|
||||
packageList.Remove(p)
|
||||
context.Progress().ColoredPrintf("@r[-]@| %s removed", p)
|
||||
p = packageList.Search(deb.Dependency{Architecture: pkg.Architecture, Pkg: pkg.Name})
|
||||
for _, pkg := range searchResults {
|
||||
pS := packageList.Search(deb.Dependency{Architecture: pkg.Architecture, Pkg: pkg.Name}, true)
|
||||
for _, p := range pS {
|
||||
packageList.Remove(p)
|
||||
context.Progress().ColoredPrintf("@r[-]@| %s removed", p)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add new discovered package
|
||||
packageList.Add(pkg)
|
||||
context.Progress().ColoredPrintf("@g[+]@| %s added", pkg)
|
||||
for _, pkg := range searchResults {
|
||||
packageList.Add(pkg)
|
||||
context.Progress().ColoredPrintf("@g[+]@| %s added", pkg)
|
||||
}
|
||||
|
||||
if noDeps {
|
||||
continue
|
||||
}
|
||||
|
||||
// Find missing dependencies for single added package
|
||||
pL := deb.NewPackageList()
|
||||
pL.Add(pkg)
|
||||
// Find missing dependencies, for each added package
|
||||
for _, pkg := range searchResults {
|
||||
pL := deb.NewPackageList()
|
||||
pL.Add(pkg)
|
||||
|
||||
var missing []deb.Dependency
|
||||
missing, err = pL.VerifyDependencies(context.DependencyOptions(), []string{arch}, packageList, nil)
|
||||
if err != nil {
|
||||
context.Progress().ColoredPrintf("@y[!]@| @!Error while verifying dependencies for pkg %s: %s@|", pkg, err)
|
||||
}
|
||||
|
||||
// Append missing dependencies to the list of dependencies to satisfy
|
||||
for _, misDep := range missing {
|
||||
found := false
|
||||
for _, d := range dependencies {
|
||||
if d == misDep {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
var missing []deb.Dependency
|
||||
missing, err = pL.VerifyDependencies(context.DependencyOptions(), []string{arch}, packageList, nil)
|
||||
if err != nil {
|
||||
context.Progress().ColoredPrintf("@y[!]@| @!Error while verifying dependencies for pkg %s: %s@|", pkg, err)
|
||||
}
|
||||
|
||||
if !found {
|
||||
dependencies = append(dependencies, misDep)
|
||||
// Append missing dependencies to the list of dependencies to satisfy
|
||||
for _, misDep := range missing {
|
||||
found := false
|
||||
for _, d := range dependencies {
|
||||
if d == misDep {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
dependencies = append(dependencies, misDep)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -186,6 +193,7 @@ Example:
|
||||
cmd.Flag.Bool("dry-run", false, "don't create destination snapshot, just show what would be pulled")
|
||||
cmd.Flag.Bool("no-deps", false, "don't process dependencies, just pull listed packages")
|
||||
cmd.Flag.Bool("no-remove", false, "don't remove other package versions when pulling package")
|
||||
cmd.Flag.Bool("all-matches", false, "pull all the packages that satisfy the dependency version requirements")
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
+24
-10
@@ -263,7 +263,7 @@ func (l *PackageList) VerifyDependencies(options int, architectures []string, so
|
||||
continue
|
||||
}
|
||||
|
||||
if sources.Search(dep) == nil {
|
||||
if sources.Search(dep, false) == nil {
|
||||
variantsMissing = append(variantsMissing, dep)
|
||||
missingCount++
|
||||
} else {
|
||||
@@ -334,7 +334,7 @@ func (l *PackageList) PrepareIndex() {
|
||||
}
|
||||
|
||||
// Search searches package index for specified package
|
||||
func (l *PackageList) Search(dep Dependency) *Package {
|
||||
func (l *PackageList) Search(dep Dependency, allMatches bool) (searchResults []*Package) {
|
||||
if !l.indexed {
|
||||
panic("list not indexed, can't search")
|
||||
}
|
||||
@@ -342,9 +342,16 @@ func (l *PackageList) Search(dep Dependency) *Package {
|
||||
if dep.Relation == VersionDontCare {
|
||||
for _, p := range l.providesIndex[dep.Pkg] {
|
||||
if p.MatchesArchitecture(dep.Architecture) {
|
||||
return p
|
||||
searchResults = append(searchResults, p)
|
||||
|
||||
if !allMatches {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(searchResults) != 0 {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
i := sort.Search(len(l.packagesIndex), func(j int) bool { return l.packagesIndex[j].Name >= dep.Pkg })
|
||||
@@ -352,12 +359,17 @@ func (l *PackageList) Search(dep Dependency) *Package {
|
||||
for i < len(l.packagesIndex) && l.packagesIndex[i].Name == dep.Pkg {
|
||||
p := l.packagesIndex[i]
|
||||
if p.MatchesDependency(dep) {
|
||||
return p
|
||||
searchResults = append(searchResults, p)
|
||||
|
||||
if !allMatches {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
i++
|
||||
}
|
||||
return nil
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Filter filters package index by specified queries (ORed together), possibly pulling dependencies
|
||||
@@ -431,11 +443,13 @@ func (l *PackageList) Filter(queries []string, withDependencies bool, source *Pa
|
||||
|
||||
// try to satisfy dependencies
|
||||
for _, dep := range missing {
|
||||
p := l.Search(dep)
|
||||
if p != nil {
|
||||
result.Add(p)
|
||||
dependencySource.Add(p)
|
||||
added++
|
||||
searchResults := l.Search(dep, false)
|
||||
if searchResults != nil {
|
||||
for _, p := range searchResults {
|
||||
result.Add(p)
|
||||
dependencySource.Add(p)
|
||||
added++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+95
-17
@@ -7,6 +7,43 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
type containsChecker struct {
|
||||
*CheckerInfo
|
||||
}
|
||||
|
||||
func (c *containsChecker) Check(params []interface{}, names []string) (result bool, error string) {
|
||||
var (
|
||||
pkgSlice1 []*Package
|
||||
pkgSlice2 []*Package
|
||||
ok bool
|
||||
)
|
||||
|
||||
pkgMap := make (map[*Package]bool)
|
||||
|
||||
|
||||
pkgSlice1, ok = params[0].([]*Package)
|
||||
if !ok {
|
||||
return false, "The first parameter is not a Package slice"
|
||||
}
|
||||
pkgSlice2, ok = params[1].([]*Package)
|
||||
if !ok {
|
||||
return false, "The second parameter is not a Package slice"
|
||||
}
|
||||
|
||||
for _, pkg := range pkgSlice2 {
|
||||
pkgMap[pkg] = true
|
||||
}
|
||||
|
||||
for _, pkg := range pkgSlice1 {
|
||||
if _, ok := pkgMap[pkg]; !ok {
|
||||
return false, ""
|
||||
}
|
||||
}
|
||||
return true, ""
|
||||
}
|
||||
|
||||
var Contains Checker = &containsChecker{&CheckerInfo{Name: "Contains", Params: []string{"Container", "Expected to contain"}}}
|
||||
|
||||
type PackageListSuite struct {
|
||||
// Simple list with "real" packages from stanzas
|
||||
list *PackageList
|
||||
@@ -14,8 +51,10 @@ type PackageListSuite struct {
|
||||
|
||||
// Mocked packages in list
|
||||
packages []*Package
|
||||
packages2 []*Package
|
||||
sourcePackages []*Package
|
||||
il *PackageList
|
||||
il2 *PackageList
|
||||
}
|
||||
|
||||
var _ = Suite(&PackageListSuite{})
|
||||
@@ -60,6 +99,20 @@ func (s *PackageListSuite) SetUpTest(c *C) {
|
||||
}
|
||||
s.il.PrepareIndex()
|
||||
|
||||
s.il2 = NewPackageList()
|
||||
s.packages2 = []*Package{
|
||||
&Package{Name: "mailer", Version: "3.5.8", Architecture: "amd64", Source: "postfix (1.3)", Provides: []string{"mail-agent"}, deps: &PackageDependencies{}},
|
||||
&Package{Name: "sendmail", Version: "1.0", Architecture: "amd64", Source: "postfix (1.3)", Provides: []string{"mail-agent"}, deps: &PackageDependencies{}},
|
||||
&Package{Name: "app", Version: "1.1-bp1", Architecture: "amd64", deps: &PackageDependencies{PreDepends: []string{"dpkg (>= 1.6)"}, Depends: []string{"lib (>> 0.9)", "data (>= 1.0)"}}},
|
||||
&Package{Name: "app", Version: "1.1-bp2", Architecture: "amd64", deps: &PackageDependencies{PreDepends: []string{"dpkg (>= 1.6)"}, Depends: []string{"lib (>> 0.9)", "data (>= 1.0)"}}},
|
||||
&Package{Name: "app", Version: "1.2", Architecture: "amd64", deps: &PackageDependencies{PreDepends: []string{"dpkg (>= 1.6)"}, Depends: []string{"lib (>> 0.9) | libx (>= 1.5)", "data (>= 1.0) | mail-agent"}}},
|
||||
&Package{Name: "app", Version: "3.0", Architecture: "amd64", deps: &PackageDependencies{PreDepends: []string{"dpkg >= 1.6)"}, Depends: []string{"lib (>> 0.9)", "data (>= 1.0)"}}},
|
||||
}
|
||||
for _, p := range s.packages2 {
|
||||
s.il2.Add(p)
|
||||
}
|
||||
s.il2.PrepareIndex()
|
||||
|
||||
s.sourcePackages = []*Package{
|
||||
&Package{Name: "postfix", Version: "1.3", Architecture: "source", SourceArchitecture: "any", IsSource: true, deps: &PackageDependencies{}},
|
||||
&Package{Name: "app", Version: "1.1~bp1", Architecture: "source", SourceArchitecture: "any", IsSource: true, deps: &PackageDependencies{}},
|
||||
@@ -196,31 +249,56 @@ func (s *PackageListSuite) TestAppend(c *C) {
|
||||
}
|
||||
|
||||
func (s *PackageListSuite) TestSearch(c *C) {
|
||||
c.Check(func() { s.list.Search(Dependency{Architecture: "i386", Pkg: "app"}) }, Panics, "list not indexed, can't search")
|
||||
//allMatches = False
|
||||
c.Check(func() { s.list.Search(Dependency{Architecture: "i386", Pkg: "app"}, false) }, Panics, "list not indexed, can't search")
|
||||
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app"}), Equals, s.packages[3])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "mail-agent"}), Equals, s.packages[4])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "puppy"}), IsNil)
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app"}, false), DeepEquals, []*Package{s.packages[3]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "mail-agent"}, false), DeepEquals, []*Package{s.packages[4]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "puppy"}, false), IsNil)
|
||||
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionEqual, Version: "1.1~bp1"}), Equals, s.packages[3])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionEqual, Version: "1.1~bp2"}), IsNil)
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionEqual, Version: "1.1~bp1"}, false), DeepEquals, []*Package{s.packages[3]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionEqual, Version: "1.1~bp2"}, false), IsNil)
|
||||
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLess, Version: "1.1"}), Equals, s.packages[3])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLess, Version: "1.1~~"}), IsNil)
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLess, Version: "1.1"}, false), DeepEquals, []*Package{s.packages[3]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLess, Version: "1.1~~"}, false), IsNil)
|
||||
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.1"}), Equals, s.packages[3])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.1~bp1"}), Equals, s.packages[3])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.1~~"}), IsNil)
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.1"}, false), DeepEquals, []*Package{s.packages[3]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.1~bp1"}, false), DeepEquals, []*Package{s.packages[3]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.1~~"}, false), IsNil)
|
||||
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreater, Version: "1.0"}), Equals, s.packages[3])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreater, Version: "1.2"}), IsNil)
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreater, Version: "1.0"}, false), DeepEquals, []*Package{s.packages[3]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreater, Version: "1.2"}, false), IsNil)
|
||||
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "1.0"}), Equals, s.packages[3])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "1.1~bp1"}), Equals, s.packages[3])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "1.2"}), IsNil)
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "1.0"}, false), DeepEquals, []*Package{s.packages[3]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "1.1~bp1"}, false), DeepEquals, []*Package{s.packages[3]})
|
||||
c.Check(s.il.Search(Dependency{Architecture: "i386", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "1.2"}, false), IsNil)
|
||||
|
||||
// search w/o version should return package with latest version
|
||||
c.Check(s.il.Search(Dependency{Architecture: "source", Pkg: "dpkg"}), Equals, s.packages[13])
|
||||
c.Check(s.il.Search(Dependency{Architecture: "source", Pkg: "dpkg"}, false), DeepEquals, []*Package{s.packages[13]})
|
||||
|
||||
// allMatches = True
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app"}, true), Contains, []*Package{s.packages2[2], s.packages2[3], s.packages2[4], s.packages2[5]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "mail-agent"}, true), Contains, []*Package{s.packages2[0], s.packages2[1]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "puppy"}, true), IsNil)
|
||||
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionEqual, Version: "1.1"}, true), Contains, []*Package{s.packages2[2], s.packages2[3]})
|
||||
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionEqual, Version: "1.1"}, true), Contains, []*Package{s.packages2[2], s.packages2[3]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionEqual, Version: "3"}, true), Contains, []*Package{s.packages2[5]})
|
||||
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionLess, Version: "1.2"}, true), Contains, []*Package{s.packages2[2], s.packages2[3]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionLess, Version: "1.1~"}, true), IsNil)
|
||||
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.2"}, true), Contains, []*Package{s.packages2[2], s.packages2[3], s.packages2[4]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.1-bp1"}, true), Contains, []*Package{s.packages2[2]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionLessOrEqual, Version: "1.0"}, true), IsNil)
|
||||
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionGreater, Version: "1.1"}, true), Contains, []*Package{s.packages2[2], s.packages2[3], s.packages2[4], s.packages2[5]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionGreater, Version: "5.0"}, true), IsNil)
|
||||
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "1.2"}, true), Contains, []*Package{s.packages2[4], s.packages2[5]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "1.1~bp1"}, true), Contains, []*Package{s.packages2[2], s.packages2[3], s.packages2[4], s.packages2[5]})
|
||||
c.Check(s.il2.Search(Dependency{Architecture: "amd64", Pkg: "app", Relation: VersionGreaterOrEqual, Version: "5.0"}, true), IsNil)
|
||||
}
|
||||
|
||||
func (s *PackageListSuite) TestFilter(c *C) {
|
||||
|
||||
+3
-2
@@ -43,7 +43,7 @@ func NewPackageFromControlFile(input Stanza) *Package {
|
||||
Version: input["Version"],
|
||||
Architecture: input["Architecture"],
|
||||
Source: input["Source"],
|
||||
V06Plus: true,
|
||||
V06Plus: true,
|
||||
}
|
||||
|
||||
delete(input, "Package")
|
||||
@@ -92,7 +92,7 @@ func NewSourcePackageFromControlFile(input Stanza) (*Package, error) {
|
||||
Version: input["Version"],
|
||||
Architecture: "source",
|
||||
SourceArchitecture: input["Architecture"],
|
||||
V06Plus: true,
|
||||
V06Plus: true,
|
||||
}
|
||||
|
||||
delete(input, "Package")
|
||||
@@ -212,6 +212,7 @@ func (p *Package) MatchesDependency(dep Dependency) bool {
|
||||
}
|
||||
|
||||
r := CompareVersions(p.Version, dep.Version)
|
||||
|
||||
switch dep.Relation {
|
||||
case VersionEqual:
|
||||
return r == 0
|
||||
|
||||
+9
-6
@@ -90,16 +90,16 @@ func (s *PackageSuite) TestKey(c *C) {
|
||||
c.Check(p.Key(""), DeepEquals, []byte("Pi386 alien-arena-common 7.40-2 c8901eedd79ac51b"))
|
||||
c.Check(p.Key("xD"), DeepEquals, []byte("xDPi386 alien-arena-common 7.40-2 c8901eedd79ac51b"))
|
||||
|
||||
p.V06Plus = false
|
||||
c.Check(p.Key(""), DeepEquals, []byte("Pi386 alien-arena-common 7.40-2"))
|
||||
c.Check(p.Key("xD"), DeepEquals, []byte("xDPi386 alien-arena-common 7.40-2"))
|
||||
p.V06Plus = false
|
||||
c.Check(p.Key(""), DeepEquals, []byte("Pi386 alien-arena-common 7.40-2"))
|
||||
c.Check(p.Key("xD"), DeepEquals, []byte("xDPi386 alien-arena-common 7.40-2"))
|
||||
}
|
||||
|
||||
func (s *PackageSuite) TestShortKey(c *C) {
|
||||
p := NewPackageFromControlFile(s.stanza)
|
||||
p := NewPackageFromControlFile(s.stanza)
|
||||
|
||||
c.Check(p.ShortKey(""), DeepEquals, []byte("Pi386 alien-arena-common 7.40-2"))
|
||||
c.Check(p.ShortKey("xD"), DeepEquals, []byte("xDPi386 alien-arena-common 7.40-2"))
|
||||
c.Check(p.ShortKey(""), DeepEquals, []byte("Pi386 alien-arena-common 7.40-2"))
|
||||
c.Check(p.ShortKey("xD"), DeepEquals, []byte("xDPi386 alien-arena-common 7.40-2"))
|
||||
}
|
||||
|
||||
func (s *PackageSuite) TestStanza(c *C) {
|
||||
@@ -174,6 +174,9 @@ func (s *PackageSuite) TestMatchesDependency(c *C) {
|
||||
// exact match
|
||||
c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionEqual, Version: "7.40-2"}), Equals, true)
|
||||
|
||||
// exact match, same version, no revision specified
|
||||
c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionEqual, Version: "7.40"}), Equals, false)
|
||||
|
||||
// different name
|
||||
c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena", Architecture: "i386", Relation: VersionEqual, Version: "7.40-2"}), Equals, false)
|
||||
|
||||
|
||||
@@ -603,6 +603,10 @@ $ aptly snapshot pull wheezy\-main wheezy\-backports wheezy\-new\-xorg xorg\-ser
|
||||
Options:
|
||||
.
|
||||
.TP
|
||||
\-\fBall\-matches\fR=false
|
||||
pull all the packages that satisfy the dependency version requirements
|
||||
.
|
||||
.TP
|
||||
\-\fBdry\-run\fR=false
|
||||
don\(cqt create destination snapshot, just show what would be pulled
|
||||
.
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
Dependencies would be pulled into snapshot:
|
||||
[empty]: Created as empty
|
||||
from snapshot:
|
||||
[sensu]: Snapshot from mirror [sensu]: http://repos.sensuapp.org/apt/ sensu
|
||||
and result would be saved as new snapshot destination.
|
||||
Loading packages (154)...
|
||||
Building indexes...
|
||||
[+] sensu_0.12.6-5_amd64 added
|
||||
[+] sensu_0.12.6-4_amd64 added
|
||||
[+] sensu_0.12.6-3_amd64 added
|
||||
[+] sensu_0.12.6-2_amd64 added
|
||||
[+] sensu_0.12.6-1_amd64 added
|
||||
[+] sensu_0.12.5-1_amd64 added
|
||||
[+] sensu_0.12.4-1_amd64 added
|
||||
[+] sensu_0.12.3-1_amd64 added
|
||||
[+] sensu_0.12.2-1_amd64 added
|
||||
[+] sensu_0.12.1-1_amd64 added
|
||||
[+] sensu_0.12.0-1_amd64 added
|
||||
[+] sensu_0.11.3-1_amd64 added
|
||||
[+] sensu_0.11.1-1_amd64 added
|
||||
[+] sensu_0.11.0.beta.4-1_amd64 added
|
||||
[+] sensu_0.11.0.beta.3-1_amd64 added
|
||||
[+] sensu_0.11.0.beta.2-1_amd64 added
|
||||
[+] sensu_0.11.0.beta.1-1_amd64 added
|
||||
[+] sensu_0.11.0.beta-1_amd64 added
|
||||
[+] sensu_0.11.0-1_amd64 added
|
||||
[+] sensu_0.10.2-1_amd64 added
|
||||
[+] sensu_0.10.1-1_amd64 added
|
||||
[+] sensu_0.10.0-2_amd64 added
|
||||
[+] sensu_0.10.0-1_amd64 added
|
||||
[+] sensu_0.9.13.beta.1-1_amd64 added
|
||||
[+] sensu_0.9.13.beta-2_amd64 added
|
||||
[+] sensu_0.9.13.beta-1_amd64 added
|
||||
[+] sensu_0.9.13-1_amd64 added
|
||||
[+] sensu_0.9.12.beta.6-2_amd64 added
|
||||
[+] sensu_0.9.12.beta.6-1_amd64 added
|
||||
[+] sensu_0.9.12.beta.5-5_amd64 added
|
||||
[+] sensu_0.9.12.beta.5-4_amd64 added
|
||||
[+] sensu_0.9.12.beta.5-3_amd64 added
|
||||
[+] sensu_0.9.12.beta.5-2_amd64 added
|
||||
[+] sensu_0.9.12.beta.5-1_amd64 added
|
||||
[+] sensu_0.9.12.beta.4-1_amd64 added
|
||||
[+] sensu_0.9.12.beta.3-3_amd64 added
|
||||
[+] sensu_0.9.12.beta.3-2_amd64 added
|
||||
[+] sensu_0.9.12.beta.3-1_amd64 added
|
||||
[+] sensu_0.9.12.beta.2-1_amd64 added
|
||||
[+] sensu_0.9.12.beta.1-1_amd64 added
|
||||
[+] sensu_0.9.12.beta-1_amd64 added
|
||||
[+] sensu_0.9.12-3_amd64 added
|
||||
[+] sensu_0.9.12-2_amd64 added
|
||||
[+] sensu_0.9.12-1_amd64 added
|
||||
[+] sensu_0.9.11-1_amd64 added
|
||||
[+] sensu_0.9.10-1_amd64 added
|
||||
[+] sensu_0.9.9.beta.4-1_amd64 added
|
||||
[+] sensu_0.9.9.beta.3-2_amd64 added
|
||||
[+] sensu_0.9.9.beta.3-1_amd64 added
|
||||
[+] sensu_0.9.9.beta.2-1_amd64 added
|
||||
[+] sensu_0.9.9.beta.1-1_amd64 added
|
||||
[+] sensu_0.9.9.beta-1_amd64 added
|
||||
[+] sensu_0.9.9-1_amd64 added
|
||||
[+] sensu_0.9.8.beta.4-1_amd64 added
|
||||
[+] sensu_0.9.8.beta.3-1_amd64 added
|
||||
[+] sensu_0.9.8.beta.2-1_amd64 added
|
||||
[+] sensu_0.9.8.beta.1-1_amd64 added
|
||||
[+] sensu_0.9.8.beta-1_amd64 added
|
||||
[+] sensu_0.9.8-1_amd64 added
|
||||
[+] sensu_0.9.7.beta.4-1_amd64 added
|
||||
[+] sensu_0.9.7.beta.3-1_amd64 added
|
||||
[+] sensu_0.9.7.beta.2-1_amd64 added
|
||||
[+] sensu_0.9.7.beta.1-1_amd64 added
|
||||
[+] sensu_0.9.7.beta-1_amd64 added
|
||||
[+] sensu_0.9.7-1_amd64 added
|
||||
[+] sensu_0.9.6.beta.7-1_amd64 added
|
||||
[+] sensu_0.9.6.beta.6-1_amd64 added
|
||||
[+] sensu_0.9.6.beta.3-1_amd64 added
|
||||
[+] sensu_0.9.6.beta.2-1_amd64 added
|
||||
[+] sensu_0.9.6-4_amd64 added
|
||||
[+] sensu_0.9.6-3_amd64 added
|
||||
[+] sensu_0.9.6-2_amd64 added
|
||||
[+] sensu_0.9.6-1_amd64 added
|
||||
[+] sensu_0.9.5-36_amd64 added
|
||||
[+] sensu_0.9.5-35_amd64 added
|
||||
[+] sensu_0.9.5-34_amd64 added
|
||||
[+] sensu_0.9.5-30_amd64 added
|
||||
[+] sensu_0.12.6-5_i386 added
|
||||
[+] sensu_0.12.6-4_i386 added
|
||||
[+] sensu_0.12.6-3_i386 added
|
||||
[+] sensu_0.12.6-2_i386 added
|
||||
[+] sensu_0.12.6-1_i386 added
|
||||
[+] sensu_0.12.5-1_i386 added
|
||||
[+] sensu_0.12.4-1_i386 added
|
||||
[+] sensu_0.12.3-1_i386 added
|
||||
[+] sensu_0.12.2-1_i386 added
|
||||
[+] sensu_0.12.1-1_i386 added
|
||||
[+] sensu_0.12.0-1_i386 added
|
||||
[+] sensu_0.11.3-1_i386 added
|
||||
[+] sensu_0.11.1-1_i386 added
|
||||
[+] sensu_0.11.0.beta.4-1_i386 added
|
||||
[+] sensu_0.11.0.beta.3-1_i386 added
|
||||
[+] sensu_0.11.0.beta.2-1_i386 added
|
||||
[+] sensu_0.11.0.beta.1-1_i386 added
|
||||
[+] sensu_0.11.0.beta-1_i386 added
|
||||
[+] sensu_0.11.0-1_i386 added
|
||||
[+] sensu_0.10.2-1_i386 added
|
||||
[+] sensu_0.10.1-1_i386 added
|
||||
[+] sensu_0.10.0-2_i386 added
|
||||
[+] sensu_0.10.0-1_i386 added
|
||||
[+] sensu_0.9.13.beta.1-1_i386 added
|
||||
[+] sensu_0.9.13.beta-2_i386 added
|
||||
[+] sensu_0.9.13.beta-1_i386 added
|
||||
[+] sensu_0.9.13-1_i386 added
|
||||
[+] sensu_0.9.12.beta.6-2_i386 added
|
||||
[+] sensu_0.9.12.beta.6-1_i386 added
|
||||
[+] sensu_0.9.12.beta.5-5_i386 added
|
||||
[+] sensu_0.9.12.beta.5-4_i386 added
|
||||
[+] sensu_0.9.12.beta.5-3_i386 added
|
||||
[+] sensu_0.9.12.beta.5-2_i386 added
|
||||
[+] sensu_0.9.12.beta.5-1_i386 added
|
||||
[+] sensu_0.9.12.beta.4-1_i386 added
|
||||
[+] sensu_0.9.12.beta.3-3_i386 added
|
||||
[+] sensu_0.9.12.beta.3-2_i386 added
|
||||
[+] sensu_0.9.12.beta.3-1_i386 added
|
||||
[+] sensu_0.9.12.beta.2-1_i386 added
|
||||
[+] sensu_0.9.12.beta.1-1_i386 added
|
||||
[+] sensu_0.9.12.beta-1_i386 added
|
||||
[+] sensu_0.9.12-3_i386 added
|
||||
[+] sensu_0.9.12-2_i386 added
|
||||
[+] sensu_0.9.12-1_i386 added
|
||||
[+] sensu_0.9.11-1_i386 added
|
||||
[+] sensu_0.9.10-1_i386 added
|
||||
[+] sensu_0.9.9.beta.4-1_i386 added
|
||||
[+] sensu_0.9.9.beta.3-2_i386 added
|
||||
[+] sensu_0.9.9.beta.3-1_i386 added
|
||||
[+] sensu_0.9.9.beta.2-1_i386 added
|
||||
[+] sensu_0.9.9.beta.1-1_i386 added
|
||||
[+] sensu_0.9.9.beta-1_i386 added
|
||||
[+] sensu_0.9.9-1_i386 added
|
||||
[+] sensu_0.9.8.beta.4-1_i386 added
|
||||
[+] sensu_0.9.8.beta.3-1_i386 added
|
||||
[+] sensu_0.9.8.beta.2-1_i386 added
|
||||
[+] sensu_0.9.8.beta.1-1_i386 added
|
||||
[+] sensu_0.9.8.beta-1_i386 added
|
||||
[+] sensu_0.9.8-1_i386 added
|
||||
[+] sensu_0.9.7.beta.4-1_i386 added
|
||||
[+] sensu_0.9.7.beta.3-1_i386 added
|
||||
[+] sensu_0.9.7.beta.2-1_i386 added
|
||||
[+] sensu_0.9.7.beta.1-1_i386 added
|
||||
[+] sensu_0.9.7.beta-1_i386 added
|
||||
[+] sensu_0.9.7-1_i386 added
|
||||
[+] sensu_0.9.6.beta.7-1_i386 added
|
||||
[+] sensu_0.9.6.beta.6-1_i386 added
|
||||
[+] sensu_0.9.6.beta.3-1_i386 added
|
||||
[+] sensu_0.9.6.beta.2-1_i386 added
|
||||
[+] sensu_0.9.6-4_i386 added
|
||||
[+] sensu_0.9.6-3_i386 added
|
||||
[+] sensu_0.9.6-2_i386 added
|
||||
[+] sensu_0.9.6-1_i386 added
|
||||
[+] sensu_0.9.5-36_i386 added
|
||||
[+] sensu_0.9.5-35_i386 added
|
||||
[+] sensu_0.9.5-34_i386 added
|
||||
[+] sensu_0.9.5-32_i386 added
|
||||
|
||||
Snapshot destination successfully created.
|
||||
You can run 'aptly publish snapshot destination' to publish snapshot as Debian repository.
|
||||
@@ -0,0 +1,62 @@
|
||||
Dependencies would be pulled into snapshot:
|
||||
[empty]: Created as empty
|
||||
from snapshot:
|
||||
[sensu]: Snapshot from mirror [sensu]: http://repos.sensuapp.org/apt/ sensu
|
||||
and result would be saved as new snapshot destination.
|
||||
Loading packages (154)...
|
||||
Building indexes...
|
||||
[+] sensu_0.12.6-5_amd64 added
|
||||
[+] sensu_0.12.6-4_amd64 added
|
||||
[+] sensu_0.12.6-3_amd64 added
|
||||
[+] sensu_0.12.6-2_amd64 added
|
||||
[+] sensu_0.12.6-1_amd64 added
|
||||
[+] sensu_0.12.5-1_amd64 added
|
||||
[+] sensu_0.12.4-1_amd64 added
|
||||
[+] sensu_0.12.3-1_amd64 added
|
||||
[+] sensu_0.12.2-1_amd64 added
|
||||
[+] sensu_0.12.1-1_amd64 added
|
||||
[+] sensu_0.12.0-1_amd64 added
|
||||
[-] sensu_0.12.6-5_amd64 removed
|
||||
[-] sensu_0.12.6-4_amd64 removed
|
||||
[-] sensu_0.12.6-3_amd64 removed
|
||||
[-] sensu_0.12.6-2_amd64 removed
|
||||
[-] sensu_0.12.6-1_amd64 removed
|
||||
[-] sensu_0.12.5-1_amd64 removed
|
||||
[-] sensu_0.12.4-1_amd64 removed
|
||||
[-] sensu_0.12.3-1_amd64 removed
|
||||
[-] sensu_0.12.2-1_amd64 removed
|
||||
[-] sensu_0.12.1-1_amd64 removed
|
||||
[-] sensu_0.12.0-1_amd64 removed
|
||||
[+] sensu_0.9.5-36_amd64 added
|
||||
[+] sensu_0.9.5-35_amd64 added
|
||||
[+] sensu_0.9.5-34_amd64 added
|
||||
[+] sensu_0.9.5-30_amd64 added
|
||||
[+] sensu_0.12.6-5_i386 added
|
||||
[+] sensu_0.12.6-4_i386 added
|
||||
[+] sensu_0.12.6-3_i386 added
|
||||
[+] sensu_0.12.6-2_i386 added
|
||||
[+] sensu_0.12.6-1_i386 added
|
||||
[+] sensu_0.12.5-1_i386 added
|
||||
[+] sensu_0.12.4-1_i386 added
|
||||
[+] sensu_0.12.3-1_i386 added
|
||||
[+] sensu_0.12.2-1_i386 added
|
||||
[+] sensu_0.12.1-1_i386 added
|
||||
[+] sensu_0.12.0-1_i386 added
|
||||
[-] sensu_0.12.6-5_i386 removed
|
||||
[-] sensu_0.12.6-4_i386 removed
|
||||
[-] sensu_0.12.6-3_i386 removed
|
||||
[-] sensu_0.12.6-2_i386 removed
|
||||
[-] sensu_0.12.6-1_i386 removed
|
||||
[-] sensu_0.12.5-1_i386 removed
|
||||
[-] sensu_0.12.4-1_i386 removed
|
||||
[-] sensu_0.12.3-1_i386 removed
|
||||
[-] sensu_0.12.2-1_i386 removed
|
||||
[-] sensu_0.12.1-1_i386 removed
|
||||
[-] sensu_0.12.0-1_i386 removed
|
||||
[+] sensu_0.9.5-36_i386 added
|
||||
[+] sensu_0.9.5-35_i386 added
|
||||
[+] sensu_0.9.5-34_i386 added
|
||||
[+] sensu_0.9.5-32_i386 added
|
||||
|
||||
Snapshot destination successfully created.
|
||||
You can run 'aptly publish snapshot destination' to publish snapshot as Debian repository.
|
||||
@@ -207,3 +207,27 @@ class PullSnapshot12Test(BaseTest):
|
||||
"aptly snapshot create sensu from mirror sensu",
|
||||
]
|
||||
runCmd = "aptly snapshot pull -architectures=amd64,i386 empty sensu destination sensu"
|
||||
|
||||
|
||||
class PullSnapshot13Test(BaseTest):
|
||||
"""
|
||||
pull snapshot: pull all versions
|
||||
"""
|
||||
fixtureDB = True
|
||||
fixtureCmds = [
|
||||
"aptly snapshot create empty empty",
|
||||
"aptly snapshot create sensu from mirror sensu",
|
||||
]
|
||||
runCmd = "aptly snapshot pull -architectures=amd64,i386 -all-matches empty sensu destination sensu"
|
||||
|
||||
|
||||
class PullSnapshot14Test(BaseTest):
|
||||
"""
|
||||
pull snapshot: pull with query
|
||||
"""
|
||||
fixtureDB = True
|
||||
fixtureCmds = [
|
||||
"aptly snapshot create empty empty",
|
||||
"aptly snapshot create sensu from mirror sensu",
|
||||
]
|
||||
runCmd = "aptly snapshot pull -architectures=amd64,i386 -all-matches empty sensu destination 'sensu (>0.12)' 'sensu (<0.9.6)'"
|
||||
|
||||
Reference in New Issue
Block a user