[improvement] changing the way versions are compared in Arch and AppImage gems

This commit is contained in:
Vinicius Moreira
2020-09-02 10:35:55 -03:00
parent 4d260df3f7
commit ae27b6af3b
3 changed files with 46 additions and 32 deletions

View File

@@ -7,13 +7,13 @@ import sqlite3
import subprocess import subprocess
import traceback import traceback
from datetime import datetime from datetime import datetime
from distutils.version import LooseVersion
from math import floor from math import floor
from pathlib import Path from pathlib import Path
from threading import Lock from threading import Lock
from typing import Set, Type, List, Tuple, Optional from typing import Set, Type, List, Tuple, Optional
from colorama import Fore from colorama import Fore
from pkg_resources import parse_version
from bauh.api.abstract.context import ApplicationContext from bauh.api.abstract.context import ApplicationContext
from bauh.api.abstract.controller import SoftwareManager, SearchResult, UpgradeRequirements, UpgradeRequirement, \ from bauh.api.abstract.controller import SoftwareManager, SearchResult, UpgradeRequirements, UpgradeRequirement, \
@@ -265,7 +265,7 @@ class AppImageManager(SoftwareManager):
app.update = False app.update = False
else: else:
try: 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: except:
app.update = False app.update = False
traceback.print_exc() traceback.print_exc()

View File

@@ -1,8 +1,10 @@
import re import re
from distutils.version import LooseVersion import traceback
from threading import Thread from threading import Thread
from typing import Set, List, Tuple, Dict, Iterable from typing import Set, List, Tuple, Dict, Iterable
from pkg_resources import parse_version
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
from bauh.gems.arch.aur import AURClient from bauh.gems.arch.aur import AURClient
@@ -203,23 +205,26 @@ class DependenciesAnalyser:
matched_providers = set() matched_providers = set()
split_informed_dep = self.re_dep_operator.split(dep_exp) split_informed_dep = self.re_dep_operator.split(dep_exp)
version_informed = LooseVersion(split_informed_dep[2]) try:
exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '==' version_informed = parse_version(split_informed_dep[2])
exp_op = split_informed_dep[1] if split_informed_dep[1] != '=' else '=='
for p in providers: for p in providers:
provided = deps_data[p]['p'] provided = deps_data[p]['p']
for provided_exp in provided: for provided_exp in provided:
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:
provided_version = LooseVersion(split_dep[2]) provided_version = parse_version(split_dep[2])
if eval('provided_version {} version_informed'.format(exp_op)): if eval('provided_version {} version_informed'.format(exp_op)):
matched_providers.add(p) matched_providers.add(p)
break break
providers = matched_providers providers = matched_providers
except:
traceback.print_exc()
if providers: if providers:
if len(providers) > 1: if len(providers) > 1:
@@ -298,19 +303,22 @@ class DependenciesAnalyser:
if '-' not in version_informed: if '-' not in version_informed:
version_found = version_found.split('-')[0] version_found = version_found.split('-')[0]
version_found = LooseVersion(version_found) try:
version_informed = LooseVersion(version_informed) version_found = parse_version(version_found)
version_informed = parse_version(version_informed)
op = dep_split[1] if dep_split[1] != '=' else '==' op = dep_split[1] if dep_split[1] != '=' else '=='
if not eval('version_found {} version_informed'.format(op)): if not eval('version_found {} version_informed'.format(op)):
self._fill_missing_dep(dep_name=dep_name, dep_exp=dep, aur_index=aur_index, self._fill_missing_dep(dep_name=dep_name, dep_exp=dep, aur_index=aur_index,
missing_deps=missing_deps, missing_deps=missing_deps,
remote_provided_map=remote_provided_map, remote_provided_map=remote_provided_map,
remote_repo_map=remote_repo_map, remote_repo_map=remote_repo_map,
repo_deps=repo_missing, aur_deps=aur_missing, repo_deps=repo_missing, aur_deps=aur_missing,
watcher=watcher, watcher=watcher,
deps_data=deps_data, deps_data=deps_data,
automatch_providers=automatch_providers) automatch_providers=automatch_providers)
except:
traceback.print_exc()
else: else:
self._fill_missing_dep(dep_name=dep_name, dep_exp=dep, aur_index=aur_index, self._fill_missing_dep(dep_name=dep_name, dep_exp=dep, aur_index=aur_index,
missing_deps=missing_deps, missing_deps=missing_deps,

View File

@@ -1,9 +1,11 @@
import logging import logging
import time import time
from distutils.version import LooseVersion import traceback
from threading import Thread from threading import Thread
from typing import Dict, Set, List, Tuple, Iterable, Optional 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.controller import UpgradeRequirements, UpgradeRequirement
from bauh.api.abstract.handler import ProcessWatcher from bauh.api.abstract.handler import ProcessWatcher
from bauh.gems.arch import pacman, sorting from bauh.gems.arch import pacman, sorting
@@ -725,11 +727,15 @@ class UpdatesSummarizer:
version_match = False version_match = False
for v in versions: 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)): if eval('provided_version {} required_version'.format(op)):
version_match = True version_match = True
break break
except:
self.logger.error("Error when comparing versions {} (provided) and {} (required)".format(v, dep_split[1]))
traceback.print_exc()
if not version_match: if not version_match:
for pname in real_providers: for pname in real_providers: