From ae27b6af3b32cd8f07ced8d59dacd9f649bf77ee Mon Sep 17 00:00:00 2001 From: Vinicius Moreira Date: Wed, 2 Sep 2020 10:35:55 -0300 Subject: [PATCH] [improvement] changing the way versions are compared in Arch and AppImage gems --- bauh/gems/appimage/controller.py | 4 +-- bauh/gems/arch/dependencies.py | 58 ++++++++++++++++++-------------- bauh/gems/arch/updates.py | 16 ++++++--- 3 files changed, 46 insertions(+), 32 deletions(-) diff --git a/bauh/gems/appimage/controller.py b/bauh/gems/appimage/controller.py index a1da2aeb..686db47f 100644 --- a/bauh/gems/appimage/controller.py +++ b/bauh/gems/appimage/controller.py @@ -7,13 +7,13 @@ import sqlite3 import subprocess import traceback from datetime import datetime -from distutils.version import LooseVersion from math import floor from pathlib import Path from threading import Lock from typing import Set, Type, List, Tuple, Optional from colorama import Fore +from pkg_resources import parse_version from bauh.api.abstract.context import ApplicationContext from bauh.api.abstract.controller import SoftwareManager, SearchResult, UpgradeRequirements, UpgradeRequirement, \ @@ -265,7 +265,7 @@ class AppImageManager(SoftwareManager): app.update = False else: try: - app.update = LooseVersion(tup[2]) > LooseVersion(app.version) if tup[2] else False + app.update = parse_version(tup[2]) > parse_version(app.version) if tup[2] else False except: app.update = False traceback.print_exc() diff --git a/bauh/gems/arch/dependencies.py b/bauh/gems/arch/dependencies.py index 99f21c8a..9f4759e7 100644 --- a/bauh/gems/arch/dependencies.py +++ b/bauh/gems/arch/dependencies.py @@ -1,8 +1,10 @@ import re -from distutils.version import LooseVersion +import traceback from threading import Thread from typing import Set, List, Tuple, Dict, Iterable +from pkg_resources import parse_version + from bauh.api.abstract.handler import ProcessWatcher from bauh.gems.arch import pacman, message, sorting, confirmation from bauh.gems.arch.aur import AURClient @@ -203,23 +205,26 @@ class DependenciesAnalyser: matched_providers = set() split_informed_dep = self.re_dep_operator.split(dep_exp) - version_informed = LooseVersion(split_informed_dep[2]) - exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '==' + try: + version_informed = parse_version(split_informed_dep[2]) + exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '==' - for p in providers: - provided = deps_data[p]['p'] + for p in providers: + provided = deps_data[p]['p'] - for provided_exp in provided: - split_dep = self.re_dep_operator.split(provided_exp) + for provided_exp in provided: + split_dep = self.re_dep_operator.split(provided_exp) - if len(split_dep) == 3 and split_dep[0] == dep_name: - provided_version = LooseVersion(split_dep[2]) + if len(split_dep) == 3 and split_dep[0] == dep_name: + provided_version = parse_version(split_dep[2]) - if eval('provided_version {} version_informed'.format(exp_op)): - matched_providers.add(p) - break + if eval('provided_version {} version_informed'.format(exp_op)): + matched_providers.add(p) + break - providers = matched_providers + providers = matched_providers + except: + traceback.print_exc() if providers: if len(providers) > 1: @@ -298,19 +303,22 @@ class DependenciesAnalyser: if '-' not in version_informed: version_found = version_found.split('-')[0] - version_found = LooseVersion(version_found) - version_informed = LooseVersion(version_informed) + try: + version_found = parse_version(version_found) + version_informed = parse_version(version_informed) - op = dep_split[1] if dep_split[1] != '=' else '==' - if not eval('version_found {} version_informed'.format(op)): - self._fill_missing_dep(dep_name=dep_name, dep_exp=dep, aur_index=aur_index, - missing_deps=missing_deps, - remote_provided_map=remote_provided_map, - remote_repo_map=remote_repo_map, - repo_deps=repo_missing, aur_deps=aur_missing, - watcher=watcher, - deps_data=deps_data, - automatch_providers=automatch_providers) + op = dep_split[1] if dep_split[1] != '=' else '==' + if not eval('version_found {} version_informed'.format(op)): + self._fill_missing_dep(dep_name=dep_name, dep_exp=dep, aur_index=aur_index, + missing_deps=missing_deps, + remote_provided_map=remote_provided_map, + remote_repo_map=remote_repo_map, + repo_deps=repo_missing, aur_deps=aur_missing, + watcher=watcher, + deps_data=deps_data, + automatch_providers=automatch_providers) + except: + traceback.print_exc() else: self._fill_missing_dep(dep_name=dep_name, dep_exp=dep, aur_index=aur_index, missing_deps=missing_deps, diff --git a/bauh/gems/arch/updates.py b/bauh/gems/arch/updates.py index be96550a..a0c6239d 100644 --- a/bauh/gems/arch/updates.py +++ b/bauh/gems/arch/updates.py @@ -1,9 +1,11 @@ import logging import time -from distutils.version import LooseVersion +import traceback from threading import Thread from typing import Dict, Set, List, Tuple, Iterable, Optional +from pkg_resources import parse_version + from bauh.api.abstract.controller import UpgradeRequirements, UpgradeRequirement from bauh.api.abstract.handler import ProcessWatcher from bauh.gems.arch import pacman, sorting @@ -725,11 +727,15 @@ class UpdatesSummarizer: version_match = False for v in versions: - provided_version, required_version = LooseVersion(v), LooseVersion(dep_split[1]) + try: + provided_version, required_version = parse_version(v), parse_version(dep_split[1]) - if eval('provided_version {} required_version'.format(op)): - version_match = True - break + if eval('provided_version {} required_version'.format(op)): + version_match = True + break + except: + self.logger.error("Error when comparing versions {} (provided) and {} (required)".format(v, dep_split[1])) + traceback.print_exc() if not version_match: for pname in real_providers: