mirror of
https://github.com/arcan1s/ahriman.git
synced 2026-04-07 02:53:38 +00:00
speedup archive_lookup processing by iterrupting cycle
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
#
|
||||
import shutil
|
||||
|
||||
from collections.abc import Iterable, Iterator
|
||||
from collections.abc import Iterable
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
@@ -27,7 +27,7 @@ from ahriman.core.build_tools.package_archive import PackageArchive
|
||||
from ahriman.core.build_tools.task import Task
|
||||
from ahriman.core.repository.cleaner import Cleaner
|
||||
from ahriman.core.repository.package_info import PackageInfo
|
||||
from ahriman.core.utils import atomic_move, filelock, package_like, safe_filename, symlink_relative
|
||||
from ahriman.core.utils import atomic_move, filelock, list_flatmap, package_like, safe_filename, symlink_relative
|
||||
from ahriman.models.changes import Changes
|
||||
from ahriman.models.event import EventType
|
||||
from ahriman.models.package import Package
|
||||
@@ -41,37 +41,34 @@ class Executor(PackageInfo, Cleaner):
|
||||
trait for common repository update processes
|
||||
"""
|
||||
|
||||
def _archive_lookup(self, package: Package) -> Iterator[Path]:
|
||||
def _archive_lookup(self, package: Package) -> list[Path]:
|
||||
"""
|
||||
check if there is a rebuilt package already
|
||||
|
||||
Args:
|
||||
package(Package): package to check
|
||||
|
||||
Yields:
|
||||
Path: list of built packages and signatures if available, empty list otherwise
|
||||
Returns:
|
||||
list[Path]: list of built packages and signatures if available, empty list otherwise
|
||||
"""
|
||||
archive = self.paths.archive_for(package.base)
|
||||
if not archive.is_dir():
|
||||
return
|
||||
return []
|
||||
|
||||
# find all packages which have same version
|
||||
same_version = [
|
||||
built
|
||||
for path in filter(package_like, archive.iterdir())
|
||||
if (built := Package.from_archive(path, self.pacman)).version == package.version
|
||||
]
|
||||
# no packages of the same version found
|
||||
if not same_version:
|
||||
return
|
||||
for path in filter(package_like, archive.iterdir()):
|
||||
# check if package version is the same
|
||||
built = Package.from_archive(path, self.pacman)
|
||||
if built.version != package.version:
|
||||
continue
|
||||
|
||||
packages = [single for built in same_version for single in built.packages.values()]
|
||||
packages = built.packages.values()
|
||||
# all packages must be either any or same architecture
|
||||
if not all(single.architecture in ("any", self.architecture) for single in packages):
|
||||
return
|
||||
continue
|
||||
|
||||
for single in packages:
|
||||
yield from archive.glob(f"{single.filename}*")
|
||||
return list_flatmap(packages, lambda single: archive.glob(f"{single.filename}*"))
|
||||
|
||||
return []
|
||||
|
||||
def _archive_rename(self, description: PackageDescription, package_base: str) -> None:
|
||||
"""
|
||||
|
||||
@@ -327,7 +327,7 @@ def full_version(epoch: str | int | None, pkgver: str, pkgrel: str) -> str:
|
||||
return f"{prefix}{pkgver}-{pkgrel}"
|
||||
|
||||
|
||||
def list_flatmap(source: Iterable[T], extractor: Callable[[T], list[R]]) -> list[R]:
|
||||
def list_flatmap(source: Iterable[T], extractor: Callable[[T], Iterable[R]]) -> list[R]:
|
||||
"""
|
||||
extract elements from list of lists, flatten them and apply ``extractor``
|
||||
|
||||
|
||||
Reference in New Issue
Block a user