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.
|
||||
:return: the list of suitable packages
|
||||
"""
|
||||
candidates = set()
|
||||
# find package by name
|
||||
if name in self.packages:
|
||||
candidates.update(self.packages.find_all(name, version_range))
|
||||
candidates = []
|
||||
|
||||
# find package by provides
|
||||
# in case of rpm:
|
||||
# set(candidates) >= set(provides)
|
||||
if name in self.provides:
|
||||
candidates.update(self._resolve_relation(
|
||||
self.provides[name], version_range)
|
||||
)
|
||||
candidates.extend(sorted(
|
||||
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:
|
||||
candidates.update(self._resolve_relation(
|
||||
self.obsoletes[name], version_range)
|
||||
)
|
||||
candidates.extend(sorted(
|
||||
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):
|
||||
"""Gets the set of unresolved dependencies.
|
||||
|
Loading…
x
Reference in New Issue
Block a user