From 9433c2910fb18765e48ac0838fa42ffe8421df60 Mon Sep 17 00:00:00 2001 From: Vinicius Moreira Date: Fri, 11 Nov 2022 17:41:40 -0300 Subject: [PATCH] [gems.arch] fix: not properly mapping all provided packages by the system when checking for upgrade requirements --- CHANGELOG.md | 6 ++++++ bauh/gems/arch/pacman.py | 4 ++-- bauh/gems/arch/updates.py | 13 ++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d14a804..aad7f6e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## NEXT + +### Fixes +- Arch + - not properly mapping all provided packages by the system when checking for upgrade requirements + ## [0.10.4] 2022-11-05 ### Improvements diff --git a/bauh/gems/arch/pacman.py b/bauh/gems/arch/pacman.py index 15ce12a2..9cc15a8e 100644 --- a/bauh/gems/arch/pacman.py +++ b/bauh/gems/arch/pacman.py @@ -539,7 +539,7 @@ def fill_provided_map(key: str, val: str, output: dict): def map_provided(remote: bool = False, pkgs: Iterable[str] = None) -> Optional[Dict[str, Set[str]]]: - output = run_cmd('pacman -{}i {}'.format('S' if remote else 'Q', ' '.join(pkgs) if pkgs else '')) + output = run_cmd(f"pacman -{'S' if remote else 'Q'}i {' '.join(pkgs) if pkgs else ''}") if output: provided_map = {} @@ -559,7 +559,7 @@ def map_provided(remote: bool = False, pkgs: Iterable[str] = None) -> Optional[D latest_version = val.split('=')[0] elif field == 'Provides': fill_provided_map(latest_name, latest_name, provided_map) - fill_provided_map('{}={}'.format(latest_name, latest_version), latest_name, provided_map) + fill_provided_map(f'{latest_name}={latest_version}', latest_name, provided_map) if val != 'None': for w in val.split(' '): diff --git a/bauh/gems/arch/updates.py b/bauh/gems/arch/updates.py index 9ec192bf..080b414b 100644 --- a/bauh/gems/arch/updates.py +++ b/bauh/gems/arch/updates.py @@ -43,6 +43,17 @@ class UpdateRequirementsContext: self.remote_repo_map = remote_repo_map self.aur_supported = aur_supported + def update_provided_map(self, update: Dict[str, Set[str]]): + if self.provided_map is None: + self.provided_map = {**update} + else: + for key, val in update.items(): + if key not in self.provided_map: + self.provided_map[key] = val + elif val: + current_val = self.provided_map[key] + current_val.update(val) + class UpdatesSummarizer: @@ -318,7 +329,7 @@ class UpdatesSummarizer: installed_to_query = {*context.installed}.difference(installed_to_ignore) if installed_to_query: - context.provided_map.update(pacman.map_provided(remote=False, pkgs=installed_to_query)) + context.update_provided_map(pacman.map_provided(remote=False, pkgs=installed_to_query)) tf = time.time() self.logger.info("Filling provided names took {0:.2f} seconds".format(tf - ti))