[gems.arch] fix: not detecting some package replacements when upgrading due to conflict information having logic operators

This commit is contained in:
Vinicius Moreira
2022-10-25 17:36:28 -03:00
parent 361afb108b
commit 3d267ff3d1
3 changed files with 24 additions and 12 deletions

View File

@@ -9,6 +9,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Fixes
- AppImage
- some desktop entries not being displayed on the desktop environment menu (requires the AppImage to be reinstalled) [#287](https://github.com/vinifmor/bauh/issues/287)
- Arch
- not detecting some package replacements when upgrading due to conflict information having logic operators (e.g: `at-spi2-core: 2.44.1 -> 2.46.0` should replace the installed `at-spi2-atk: 2.38`)
- GUI
- management panel not fully maximizing

View File

@@ -2,7 +2,7 @@ import re
import traceback
from logging import Logger
from threading import Thread
from typing import Set, List, Tuple, Dict, Iterable, Optional, Generator
from typing import Set, List, Tuple, Dict, Iterable, Optional, Generator, Pattern
from bauh.api.abstract.handler import ProcessWatcher
from bauh.gems.arch import pacman, message, sorting, confirmation
@@ -14,12 +14,20 @@ from bauh.view.util.translation import I18n
class DependenciesAnalyser:
_re_dep_operator: Optional[Pattern] = None
def __init__(self, aur_client: AURClient, i18n: I18n, logger: Logger):
self.aur_client = aur_client
self.i18n = i18n
self.re_dep_operator = re.compile(r'([<>=]+)')
self._log = logger
@classmethod
def re_dep_operator(cls) -> Pattern:
if not cls._re_dep_operator:
cls._re_dep_operator = re.compile(r'([<>=]+)')
return cls._re_dep_operator
def _fill_repository(self, name: str, output: List[Tuple[str, str]]):
repository = pacman.read_repository_from_info(name)
@@ -225,7 +233,7 @@ class DependenciesAnalyser:
raise Exception(f"Could not retrieve information from providers: "
f"{', '.join(data_not_found)}")
split_informed_dep = self.re_dep_operator.split(dep_exp)
split_informed_dep = self.re_dep_operator().split(dep_exp)
version_required = split_informed_dep[2]
exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '=='
@@ -237,7 +245,7 @@ class DependenciesAnalyser:
info = missing_providers_data[p]
for provided_exp in info['p']:
split_dep = self.re_dep_operator.split(provided_exp)
split_dep = self.re_dep_operator().split(provided_exp)
if len(split_dep) == 3 and split_dep[0] == dep_name:
version_provided = split_dep[2]
@@ -253,7 +261,7 @@ class DependenciesAnalyser:
return
else:
for _, dep_data in self.aur_client.gen_updates_data((dep_name,)):
split_informed_dep = self.re_dep_operator.split(dep_exp)
split_informed_dep = self.re_dep_operator().split(dep_exp)
version_required = split_informed_dep[2]
exp_op = split_informed_dep[1].strip()
@@ -270,7 +278,7 @@ class DependenciesAnalyser:
if dep_name == dep_exp:
version_required, exp_op = None, None
else:
split_informed_dep = self.re_dep_operator.split(dep_exp)
split_informed_dep = self.re_dep_operator().split(dep_exp)
version_required = split_informed_dep[2]
exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '=='
@@ -405,7 +413,7 @@ class DependenciesAnalyser:
if dep in pkgs_data:
continue
if dep not in provided_map:
dep_split = self.re_dep_operator.split(dep)
dep_split = self.re_dep_operator().split(dep)
dep_name = dep_split[0].strip()
if dep_name not in deps_checked:

View File

@@ -149,12 +149,14 @@ class UpdatesSummarizer:
for p, data in context.pkgs_data.items():
if data['c']:
for c in data['c']:
if c and c != p and c in context.installed_names:
# source = provided_map[c]
root_conflict[c] = p
if c:
pkg_name = DependenciesAnalyser.re_dep_operator().split(c)[0]
if pkg_name != p and pkg_name in context.installed_names:
# source = provided_map[c]
root_conflict[pkg_name] = p
if (p, c) in root_conflict.items():
mutual_conflicts[c] = p
if (p, pkg_name) in root_conflict.items():
mutual_conflicts[pkg_name] = p
if mutual_conflicts:
for pkg1, pkg2 in mutual_conflicts.items():