Skip to content

Commit 0f14143

Browse files
authored
Merge pull request #644 from smira/615-all-variants
Fix incomplete dependencies with follow-all-variants
2 parents 1c44b4f + e519817 commit 0f14143

4 files changed

Lines changed: 46 additions & 4 deletions

File tree

deb/list.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ func NewPackageListFromRefList(reflist *PackageRefList, collection *PackageColle
124124
return result, nil
125125
}
126126

127+
// Has checks whether package is already in the list
128+
func (l *PackageList) Has(p *Package) bool {
129+
key := l.keyFunc(p)
130+
_, ok := l.packages[key]
131+
132+
return ok
133+
}
134+
127135
// Add appends package to package list, additionally checking for uniqueness
128136
func (l *PackageList) Add(p *Package) error {
129137
key := l.keyFunc(p)
@@ -511,15 +519,27 @@ func (l *PackageList) FilterWithProgress(queries []PackageQuery, withDependencie
511519

512520
// try to satisfy dependencies
513521
for _, dep := range missing {
514-
// dependency might have already been satisfied
515-
// with packages already been added
516-
if result.Search(dep, false) != nil {
517-
continue
522+
if dependencyOptions&DepFollowAllVariants == 0 {
523+
// dependency might have already been satisfied
524+
// with packages already been added
525+
//
526+
// when follow-all-variants is enabled, we need to try to expand anyway,
527+
// as even if dependency is satisfied now, there might be other ways to satisfy dependency
528+
if result.Search(dep, false) != nil {
529+
if dependencyOptions&DepVerboseResolve == DepVerboseResolve && progress != nil {
530+
progress.ColoredPrintf("@{y}Already satisfied dependency@|: %s with %s", &dep, result.Search(dep, true))
531+
}
532+
continue
533+
}
518534
}
519535

520536
searchResults := l.Search(dep, true)
521537
if len(searchResults) > 0 {
522538
for _, p := range searchResults {
539+
if result.Has(p) {
540+
continue
541+
}
542+
523543
if dependencyOptions&DepVerboseResolve == DepVerboseResolve && progress != nil {
524544
progress.ColoredPrintf("@{g}Injecting package@|: %s", p)
525545
}

deb/version.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,13 @@ func ParseDependency(dep string) (d Dependency, err error) {
262262
}
263263

264264
d.Pkg = strings.TrimSpace(dep[0:i])
265+
if strings.ContainsRune(d.Pkg, ':') {
266+
parts := strings.SplitN(d.Pkg, ":", 2)
267+
d.Pkg, d.Architecture = parts[0], parts[1]
268+
if d.Architecture == "any" {
269+
d.Architecture = ""
270+
}
271+
}
265272

266273
rel := ""
267274
if dep[i+1] == '>' || dep[i+1] == '<' || dep[i+1] == '=' {

deb/version_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,20 @@ func (s *VersionSuite) TestParseDependency(c *C) {
164164
c.Check(d.Version, Equals, "1.6")
165165
c.Check(d.Architecture, Equals, "i386")
166166

167+
d, e = ParseDependency("python:any (>= 2.7~)")
168+
c.Check(e, IsNil)
169+
c.Check(d.Pkg, Equals, "python")
170+
c.Check(d.Relation, Equals, VersionGreaterOrEqual)
171+
c.Check(d.Version, Equals, "2.7~")
172+
c.Check(d.Architecture, Equals, "")
173+
174+
d, e = ParseDependency("python:amd64 (>= 2.7~)")
175+
c.Check(e, IsNil)
176+
c.Check(d.Pkg, Equals, "python")
177+
c.Check(d.Relation, Equals, VersionGreaterOrEqual)
178+
c.Check(d.Version, Equals, "2.7~")
179+
c.Check(d.Architecture, Equals, "amd64")
180+
167181
d, e = ParseDependency("dpkg{i386}")
168182
c.Check(e, IsNil)
169183
c.Check(d.Pkg, Equals, "dpkg")

system/t05_snapshot/PullSnapshot15Test_gold

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
[snap1]: Snapshot from mirror [wheezy-main]: http://mirror.yandex.ru/debian/ wheezy
44
[snap2]: Snapshot from mirror [wheezy-backports]: http://mirror.yandex.ru/debian/ wheezy-backports
5+
Already satisfied dependency: init-system-helpers (>= 1.18~) [i386] with [init-system-helpers_1.18~bpo70+1_all]
56
Building indexes...
67
Dependencies would be pulled into snapshot:
78
Injecting package: init-system-helpers_1.18~bpo70+1_all

0 commit comments

Comments
 (0)