From a3a66c7c9a697a82268671b95037cc1cb70172f5 Mon Sep 17 00:00:00 2001 From: Evgeniy Alekseev Date: Sat, 13 Mar 2021 02:27:27 +0300 Subject: [PATCH] count epoch --- package/archlinux/PKGBUILD | 2 +- src/ahriman/application/ahriman.py | 4 +++- src/ahriman/application/application.py | 4 ++-- src/ahriman/core/repository.py | 4 +++- src/ahriman/models/package.py | 13 +++++++++---- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/package/archlinux/PKGBUILD b/package/archlinux/PKGBUILD index 75493b0a..6de63053 100644 --- a/package/archlinux/PKGBUILD +++ b/package/archlinux/PKGBUILD @@ -23,7 +23,7 @@ optdepends=('aws-cli: sync to s3' source=("https://github.com/arcan1s/ahriman/releases/download/$pkgver/$pkgname-$pkgver-src.tar.xz" 'ahriman.sysusers' 'ahriman.tmpfiles') -sha512sums=('20348a0cf94893a461c0e5ca30da5e48821d276983fcb5ea92245e3e98bcc505cb0ba23ba08b827e2fbd717d807dd269de175536f26eddd6ae152f9aa0b418b7' +sha512sums=('0857347855426649312961ee5af1680c680bdc62000e7c4c7c9e3d960ec8fe8e3bd1dfa0c20921c13ea0d67fdfe085281bd30b3e8cc4fa1e4c36bcdb7c43266d' '13718afec2c6786a18f0b223ef8e58dccf0688bca4cdbe203f14071f5031ed20120eb0ce38b52c76cfd6e8b6581a9c9eaa2743eb11abbaca637451a84c33f075' '55b20f6da3d66e7bbf2add5d95a3b60632df121717d25a993e56e737d14f51fe063eb6f1b38bd81cc32e05db01c0c1d80aaa720c45cde87f238d8b46cdb8cbc4') backup=('etc/ahriman.ini' diff --git a/src/ahriman/application/ahriman.py b/src/ahriman/application/ahriman.py index 7ce47ed6..cf693afb 100644 --- a/src/ahriman/application/ahriman.py +++ b/src/ahriman/application/ahriman.py @@ -51,7 +51,7 @@ def sync(args: argparse.Namespace) -> None: def update(args: argparse.Namespace) -> None: app = Application.from_args(args) log_fn = lambda line: print(line) if args.dry_run else app.logger.info(line) - packages = app.get_updates(args.no_aur, args.no_manual, args.no_vcs, log_fn) + packages = app.get_updates(args.package, args.no_aur, args.no_manual, args.no_vcs, log_fn) if args.dry_run: return app.update(packages) @@ -79,6 +79,7 @@ if __name__ == '__main__': add_parser.set_defaults(fn=add) check_parser = subparsers.add_parser('check', description='check for updates') + check_parser.add_argument('package', help='filter check by packages', nargs='*') check_parser.set_defaults(fn=update, no_aur=False, no_manual=True, no_vcs=False, dry_run=True) rebuild_parser = subparsers.add_parser('rebuild', description='rebuild whole repository') @@ -97,6 +98,7 @@ if __name__ == '__main__': sync_parser.set_defaults(fn=sync) update_parser = subparsers.add_parser('update', description='run updates') + update_parser.add_argument('package', help='filter check by packages', nargs='*') update_parser.add_argument('--dry-run', help='just perform check for updates, same as check command', action='store_true') update_parser.add_argument('--no-aur', help='do not check for AUR updates', action='store_true') update_parser.add_argument('--no-manual', help='do not include manual updates', action='store_true') diff --git a/src/ahriman/application/application.py b/src/ahriman/application/application.py index 0549fea7..0109cff3 100644 --- a/src/ahriman/application/application.py +++ b/src/ahriman/application/application.py @@ -58,12 +58,12 @@ class Application: self.report() self.sync() - def get_updates(self, no_aur: bool, no_manual: bool, no_vcs: bool, + def get_updates(self, filter_packages: List[str], no_aur: bool, no_manual: bool, no_vcs: bool, log_fn: Callable[[str], None]) -> List[Package]: updates = [] if not no_aur: - updates.extend(self.repository.updates_aur(no_vcs)) + updates.extend(self.repository.updates_aur(filter_packages, no_vcs)) if not no_manual: updates.extend(self.repository.updates_manual()) diff --git a/src/ahriman/core/repository.py b/src/ahriman/core/repository.py index f396789f..ee92d981 100644 --- a/src/ahriman/core/repository.py +++ b/src/ahriman/core/repository.py @@ -157,7 +157,7 @@ class Repository: return self.repo.repo_path - def updates_aur(self, no_vcs: bool) -> List[Package]: + def updates_aur(self, filter_packages: Iterable[str], no_vcs: bool) -> List[Package]: result: List[Package] = [] build_section = self.config.get_section_name('build', self.architecture) @@ -168,6 +168,8 @@ class Repository: continue if local.is_vcs and no_vcs: continue + if filter_packages and local.base not in filter_packages: + continue try: remote = Package.load(local.base, self.pacman, self.aur_url) diff --git a/src/ahriman/models/package.py b/src/ahriman/models/package.py index 83272b04..76b0483e 100644 --- a/src/ahriman/models/package.py +++ b/src/ahriman/models/package.py @@ -25,9 +25,8 @@ import shutil import tempfile from dataclasses import dataclass, field -from pyalpm import Handle from srcinfo.parse import parse_srcinfo -from typing import List, Set, Type +from typing import List, Optional, Set, Type from ahriman.core.alpm.pacman import Pacman from ahriman.core.exceptions import InvalidPackageInfo @@ -76,7 +75,7 @@ class Package: src_info, errors = parse_srcinfo(src_info_source) if errors: raise InvalidPackageInfo(errors) - return f'{src_info["pkgver"]}-{src_info["pkgrel"]}' + return self.full_version(src_info.get('epoch'), src_info['pkgver'], src_info['pkgrel']) finally: shutil.rmtree(clone_dir, ignore_errors=True) @@ -97,8 +96,9 @@ class Package: if errors: raise InvalidPackageInfo(errors) packages = set(src_info['packages'].keys()) + version = cls.full_version(src_info.get('epoch'), src_info['pkgver'], src_info['pkgrel']) - return cls(src_info['pkgbase'], f'{src_info["pkgver"]}-{src_info["pkgrel"]}', aur_url, packages) + return cls(src_info['pkgbase'], version, aur_url, packages) @staticmethod def dependencies(path: str) -> Set[str]: @@ -115,6 +115,11 @@ class Package: packages = set(src_info['packages'].keys()) return set(depends + makedepends) - packages + @staticmethod + def full_version(epoch: Optional[str], pkgver: str, pkgrel: str) -> str: + prefix = f'{epoch}:' if epoch else '' + return f'{prefix}{pkgver}-{pkgrel}' + @staticmethod def load(path: str, pacman: Pacman, aur_url: str) -> Package: try: