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