packages_tree: exact match trumps other providers
Ubuntu frequently has multiple providers for the same package name, e.g. "vim" is provided by "vim", "vim-gnome" etc. We need to adjust the resolving algorithm to: 1. lookup in virtual packages 2. lookup in packages 3. lookup in obsoletes. Use the package which was found last (version-sorted). Closes-bug: 1656888 Change-Id: I7279aa6526ff9133829be2e316932c9b052c7814 Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
This commit is contained in:
parent
3021c00156
commit
25b8673f84
@ -68,25 +68,31 @@ class PackagesTree(object):
|
|||||||
:param version_range: the range of versions.
|
:param version_range: the range of versions.
|
||||||
:return: the list of suitable packages
|
:return: the list of suitable packages
|
||||||
"""
|
"""
|
||||||
candidates = set()
|
candidates = []
|
||||||
# find package by name
|
|
||||||
if name in self.packages:
|
|
||||||
candidates.update(self.packages.find_all(name, version_range))
|
|
||||||
|
|
||||||
# find package by provides
|
# find package by provides
|
||||||
# in case of rpm:
|
# in case of rpm:
|
||||||
# set(candidates) >= set(provides)
|
# set(candidates) >= set(provides)
|
||||||
if name in self.provides:
|
if name in self.provides:
|
||||||
candidates.update(self._resolve_relation(
|
candidates.extend(sorted(
|
||||||
self.provides[name], version_range)
|
self._resolve_relation(self.provides[name], version_range),
|
||||||
)
|
key=lambda x: x.version
|
||||||
|
))
|
||||||
|
|
||||||
|
# find package by name
|
||||||
|
if name in self.packages:
|
||||||
|
candidates.extend(sorted(
|
||||||
|
self.packages.find_all(name, version_range),
|
||||||
|
key=lambda x: x.version
|
||||||
|
))
|
||||||
|
|
||||||
if name in self.obsoletes:
|
if name in self.obsoletes:
|
||||||
candidates.update(self._resolve_relation(
|
candidates.extend(sorted(
|
||||||
self.obsoletes[name], version_range)
|
self._resolve_relation(self.obsoletes[name], version_range),
|
||||||
)
|
key=lambda x: x.version
|
||||||
|
))
|
||||||
|
|
||||||
return sorted(candidates, key=lambda x: x.version)
|
return candidates
|
||||||
|
|
||||||
def get_unresolved_dependencies(self):
|
def get_unresolved_dependencies(self):
|
||||||
"""Gets the set of unresolved dependencies.
|
"""Gets the set of unresolved dependencies.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user