Merge smira/master into pull_multiple_packages

Resolved conflicts arisen following smira's new commits into master.
This commit is contained in:
Simon Aquino
2014-06-28 01:32:16 +01:00
7 changed files with 255 additions and 69 deletions
+31 -11
View File
@@ -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,29 +334,47 @@ 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) []*Package {
if !l.indexed {
panic("list not indexed, can't search")
}
searchResults := []*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 searchResults
}
}
i := sort.Search(len(l.packagesIndex), func(j int) bool { return l.packagesIndex[j].Name >= dep.Pkg })
for i < len(l.packagesIndex) && l.packagesIndex[i].Name == dep.Pkg {
p := l.packagesIndex[i]
if p.MatchesDependency(dep) {
return p
if p.MatchesDependency(dep, allMatches) {
searchResults = append(searchResults, p)
if !allMatches {
break
}
}
i++
}
if len(searchResults) != 0 {
return searchResults
}
return nil
}
@@ -404,7 +422,7 @@ func (l *PackageList) Filter(queries []string, withDependencies bool, source *Pa
for i < len(l.packagesIndex) && l.packagesIndex[i].Name == dep.Pkg {
p := l.packagesIndex[i]
if p.MatchesDependency(dep) {
if p.MatchesDependency(dep, false) {
result.Add(p)
}
i++
@@ -431,11 +449,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++
}
}
}
}