handle provides list

This commit is contained in:
Evgenii Alekseev 2021-07-05 22:08:04 +03:00
parent c455bd34ce
commit dad3f418ad
5 changed files with 21 additions and 6 deletions

View File

@ -65,8 +65,10 @@ class Application:
"""
known_packages: Set[str] = set()
# local set
for package in self.repository.packages():
known_packages.update(package.packages.keys())
for base in self.repository.packages():
for package, properties in base.packages.items():
known_packages.add(package)
known_packages.update(properties.provides)
known_packages.update(self.repository.pacman.all_packages())
return known_packages

View File

@ -18,7 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from pyalpm import Handle # type: ignore
from typing import List, Set
from typing import Set
from ahriman.core.configuration import Configuration
@ -40,13 +40,15 @@ class Pacman:
for repository in configuration.getlist("alpm", "repositories"):
self.handle.register_syncdb(repository, 0) # 0 is pgp_level
def all_packages(self) -> List[str]:
def all_packages(self) -> Set[str]:
"""
get list of packages known for alpm
:return: list of package names
"""
result: Set[str] = set()
for database in self.handle.get_syncdbs():
result.update({package.name for package in database.pkgcache})
for package in database.pkgcache:
result.add(package.name) # package itself
result.update(package.provides) # provides list for meta-packages
return list(result)
return result

View File

@ -38,6 +38,7 @@ class PackageDescription:
:ivar groups: package groups
:ivar installed_size: package installed size
:ivar licenses: package licenses list
:ivar provides: list of provided packages
:ivar url: package url
"""
@ -50,6 +51,7 @@ class PackageDescription:
groups: List[str] = field(default_factory=list)
installed_size: Optional[int] = None
licenses: List[str] = field(default_factory=list)
provides: List[str] = field(default_factory=list)
url: Optional[str] = None
@property
@ -89,4 +91,5 @@ class PackageDescription:
groups=package.groups,
installed_size=package.isize,
licenses=package.licenses,
provides=package.provides,
url=package.url)

View File

@ -8,3 +8,10 @@ def test_all_packages(pacman: Pacman) -> None:
packages = pacman.all_packages()
assert packages
assert "pacman" in packages
def test_all_packages_with_provides(pacman: Pacman) -> None:
"""
package list must contain provides packages
"""
assert 'sh' in pacman.all_packages()

View File

@ -69,5 +69,6 @@ def pyalpm_package_description_ahriman(package_description_ahriman: PackageDescr
type(mock).isize = PropertyMock(return_value=package_description_ahriman.installed_size)
type(mock).licenses = PropertyMock(return_value=package_description_ahriman.licenses)
type(mock).size = PropertyMock(return_value=package_description_ahriman.archive_size)
type(mock).provides = PropertyMock(return_value=package_description_ahriman.provides)
type(mock).url = PropertyMock(return_value=package_description_ahriman.url)
return mock