From ce1c08458e68fc3a9d095a26c2af6fb92b4e8b61 Mon Sep 17 00:00:00 2001 From: Vinicius Moreira Date: Wed, 6 Jan 2021 17:31:22 -0300 Subject: [PATCH] [arch] fix -> displaying provided repository packages on the search results --- CHANGELOG.md | 1 + bauh/gems/arch/controller.py | 46 +++++++++++++----------------------- 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c6d0163..fb0eb6e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixes - Arch - crashing when information of a given package is not available + - displaying "provided" repository packages on the search results (e.g: **nvidia** would appear as a package) - UI - displaying a popup when information of a given package is not available diff --git a/bauh/gems/arch/controller.py b/bauh/gems/arch/controller.py index 2c1798c8..0039ea09 100644 --- a/bauh/gems/arch/controller.py +++ b/bauh/gems/arch/controller.py @@ -350,36 +350,24 @@ class ArchManager(SoftwareManager): Thread(target=self.aur_mapper.fill_package_build, args=(pkg,), daemon=True).start() - def _search_in_repos_and_fill(self, words: str, disk_loader: DiskCacheLoader, read_installed: Thread, installed: List[ArchPackage], res: SearchResult): - repo_search = pacman.search(words) - pkgname = words.split(' ')[0].strip() + def _search_in_repos_and_fill(self, words: str, read_installed: Thread, installed: List[ArchPackage], res: SearchResult): + ti = time.time() + pkgs_found = pacman.search(words) + read_installed.join() - if not repo_search or pkgname not in repo_search: - pkg_found = pacman.get_info_dict(pkgname, remote=False) + added = set() + if installed: + query = words.strip() + for p in installed: + if p.repository != 'aur' and (p.name in pkgs_found or query in p.name): + added.add(p.name) + res.installed.append(p) - if pkg_found and pkg_found['validated by'] and pkg_found['name'] not in repo_search: - repo_search[pkgname] = {'version': pkg_found.get('version'), - 'repository': 'unknown', - 'description': pkg_found.get('description')} - - if repo_search: - repo_pkgs = [] - for name, data in repo_search.items(): - pkg = ArchPackage(name=name, i18n=self.i18n, **data) - repo_pkgs.append(pkg) - - if repo_pkgs: - read_installed.join() - - repo_installed = {p.name: p for p in installed if p.repository != 'aur'} if installed else {} - - for pkg in repo_pkgs: - pkg_installed = repo_installed.get(pkg.name) - if pkg_installed: - res.installed.append(pkg_installed) - else: - pkg.installed = False - res.new.append(pkg) + for pkgname, pkgdata in pkgs_found.items(): + if pkgname not in added: + res.new.append(ArchPackage(name=pkgname, i18n=self.i18n, **pkgdata)) + tf = time.time() + self.logger.info("Searching repository packages took {0:.2f} seconds".format(tf - ti)) def _search_in_aur_and_fill(self, words: str, disk_loader: DiskCacheLoader, read_installed: Thread, installed: List[ArchPackage], res: SearchResult): api_res = self.aur_client.search(words) @@ -446,7 +434,7 @@ class ArchManager(SoftwareManager): aur_search.start() if arch_config['repositories']: - self._search_in_repos_and_fill(final_words, disk_loader, read_installed, installed, res) + self._search_in_repos_and_fill(final_words, read_installed, installed, res) if aur_search: aur_search.join()