[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 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()

View File

@@ -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,

View File

@@ -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: