mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-08 17:54:15 +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
|
### Fixes
|
||||||
- AppImage
|
- 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)
|
- 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
|
- GUI
|
||||||
- management panel not fully maximizing
|
- management panel not fully maximizing
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import re
|
|||||||
import traceback
|
import traceback
|
||||||
from logging import Logger
|
from logging import Logger
|
||||||
from threading import Thread
|
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.api.abstract.handler import ProcessWatcher
|
||||||
from bauh.gems.arch import pacman, message, sorting, confirmation
|
from bauh.gems.arch import pacman, message, sorting, confirmation
|
||||||
@@ -14,12 +14,20 @@ from bauh.view.util.translation import I18n
|
|||||||
|
|
||||||
class DependenciesAnalyser:
|
class DependenciesAnalyser:
|
||||||
|
|
||||||
|
_re_dep_operator: Optional[Pattern] = None
|
||||||
|
|
||||||
def __init__(self, aur_client: AURClient, i18n: I18n, logger: Logger):
|
def __init__(self, aur_client: AURClient, i18n: I18n, logger: Logger):
|
||||||
self.aur_client = aur_client
|
self.aur_client = aur_client
|
||||||
self.i18n = i18n
|
self.i18n = i18n
|
||||||
self.re_dep_operator = re.compile(r'([<>=]+)')
|
|
||||||
self._log = logger
|
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]]):
|
def _fill_repository(self, name: str, output: List[Tuple[str, str]]):
|
||||||
|
|
||||||
repository = pacman.read_repository_from_info(name)
|
repository = pacman.read_repository_from_info(name)
|
||||||
@@ -225,7 +233,7 @@ class DependenciesAnalyser:
|
|||||||
raise Exception(f"Could not retrieve information from providers: "
|
raise Exception(f"Could not retrieve information from providers: "
|
||||||
f"{', '.join(data_not_found)}")
|
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]
|
version_required = split_informed_dep[2]
|
||||||
exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '=='
|
exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '=='
|
||||||
@@ -237,7 +245,7 @@ class DependenciesAnalyser:
|
|||||||
info = missing_providers_data[p]
|
info = missing_providers_data[p]
|
||||||
|
|
||||||
for provided_exp in info['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:
|
if len(split_dep) == 3 and split_dep[0] == dep_name:
|
||||||
version_provided = split_dep[2]
|
version_provided = split_dep[2]
|
||||||
@@ -253,7 +261,7 @@ class DependenciesAnalyser:
|
|||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
for _, dep_data in self.aur_client.gen_updates_data((dep_name,)):
|
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]
|
version_required = split_informed_dep[2]
|
||||||
exp_op = split_informed_dep[1].strip()
|
exp_op = split_informed_dep[1].strip()
|
||||||
|
|
||||||
@@ -270,7 +278,7 @@ class DependenciesAnalyser:
|
|||||||
if dep_name == dep_exp:
|
if dep_name == dep_exp:
|
||||||
version_required, exp_op = None, None
|
version_required, exp_op = None, None
|
||||||
else:
|
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]
|
version_required = split_informed_dep[2]
|
||||||
exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '=='
|
exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '=='
|
||||||
|
|
||||||
@@ -405,7 +413,7 @@ class DependenciesAnalyser:
|
|||||||
if dep in pkgs_data:
|
if dep in pkgs_data:
|
||||||
continue
|
continue
|
||||||
if dep not in provided_map:
|
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()
|
dep_name = dep_split[0].strip()
|
||||||
|
|
||||||
if dep_name not in deps_checked:
|
if dep_name not in deps_checked:
|
||||||
|
|||||||
@@ -149,12 +149,14 @@ class UpdatesSummarizer:
|
|||||||
for p, data in context.pkgs_data.items():
|
for p, data in context.pkgs_data.items():
|
||||||
if data['c']:
|
if data['c']:
|
||||||
for c in data['c']:
|
for c in data['c']:
|
||||||
if c and c != p and c in context.installed_names:
|
if c:
|
||||||
# source = provided_map[c]
|
pkg_name = DependenciesAnalyser.re_dep_operator().split(c)[0]
|
||||||
root_conflict[c] = p
|
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():
|
if (p, pkg_name) in root_conflict.items():
|
||||||
mutual_conflicts[c] = p
|
mutual_conflicts[pkg_name] = p
|
||||||
|
|
||||||
if mutual_conflicts:
|
if mutual_conflicts:
|
||||||
for pkg1, pkg2 in mutual_conflicts.items():
|
for pkg1, pkg2 in mutual_conflicts.items():
|
||||||
|
|||||||
Reference in New Issue
Block a user