mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-06 21:44:16 +02:00
[gems.arch] fix: not detecting some package replacements when upgrading due to conflict information having logic operators
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user