def search_for(self, dependency: Dependency) -> list[DependencyPackage]: """ Search for the specifications that match the given dependency. The specifications in the returned list will be considered in reverse order, so the latest version ought to be last. """ if dependency.is_root: return PackageCollection(dependency, [self._package]) if dependency.is_direct_origin(): packages = [self.search_for_direct_origin_dependency(dependency)] else: packages = self._pool.find_packages(dependency) packages.sort( key=lambda p: ( not p.is_prerelease() and not dependency. allows_prereleases(), p.version, ), reverse=True, ) if not packages: packages = self.search_for_installed_packages(dependency) return PackageCollection(dependency, packages)
def _compatible_dependency(self, other: Dependency) -> bool: return ( self.dependency.is_root or other.is_root or other.is_same_package_as(self.dependency) or ( # we do this here to indicate direct origin dependencies are # compatible with NVR dependencies self.dependency.complete_name == other.complete_name and self.dependency.is_direct_origin() != other.is_direct_origin() ) )