Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/cygwin-apps/calm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2022-02-04 17:58:51 +0300
committerJon Turney <jon.turney@dronecode.org.uk>2022-02-06 15:52:33 +0300
commit40a756adfaffae36e136b5ed384fdb3ff98fe6a4 (patch)
tree38e406f39c28b99b081ea9084683bd1beaa42b9f
parent599f5f12038fe9a8a7383e6f62ae6d4e7465df82 (diff)
Correctly identify upstream version for legacy packages
-rw-r--r--calm/repology.py56
1 files changed, 52 insertions, 4 deletions
diff --git a/calm/repology.py b/calm/repology.py
index eaf4a1e..16d285b 100644
--- a/calm/repology.py
+++ b/calm/repology.py
@@ -26,15 +26,26 @@
# may not exist for some packages, e.g. where upstream doesn't do releases)
#
+from collections import namedtuple
+
import json
import logging
import time
import urllib.request
+from .version import SetupVersion
+
REPOLOGY_API_URL = 'https://repology.org/api/v1/projects/'
last_check = 0
last_data = {}
+LegacyData = namedtuple('LegacyData', ['version', 'ignores'])
+use_legacy = {'qt': [LegacyData('5', []),
+ LegacyData('4', []),
+ LegacyData('3', [])],
+ 'gtk': [LegacyData('3', ['3.9', '+']),
+ LegacyData('2', [])]}
+
def repology_fetch_versions():
upstream_versions = {}
@@ -52,13 +63,37 @@ def repology_fetch_versions():
for pn in sorted(j.keys()):
p = j[pn]
- # first, pick out the version which repology has called newest
+ # first, pick out the version which repology has called newest, and
+ # if needed, also pick out latest version for legacy packages
newest_version = None
+ legacy_versions = {}
+
for i in p:
+ v = i['version']
if i['status'] == 'newest':
- newest_version = i['version']
- break
- else:
+ newest_version = v
+
+ if (pn in use_legacy) and (i['status'] in ['legacy', 'outdated']):
+ prefix = None
+ for ld in use_legacy[pn]:
+ if v.startswith(ld.version):
+ prefix = ld.version
+ break
+
+ if not prefix:
+ continue
+
+ # blacklist versions containing substrings (pre-release
+ # versions etc.)
+ if any(ignore in v for ignore in ld.ignores):
+ continue
+
+ # repology doesn't identify the highest legacy version, so
+ # we have to that ourselves
+ if SetupVersion(v) > SetupVersion(legacy_versions.get(prefix, '0')):
+ legacy_versions[prefix] = v
+
+ if not newest_version:
continue
# next, assign that version to all the corresponding cygwin source
@@ -69,6 +104,19 @@ def repology_fetch_versions():
for i in p:
if i['repo'] == "cygwin":
source_pn = i['srcname']
+
+ # if package name contains legacy version
+ if pn in use_legacy:
+ prefix = None
+ for ld in use_legacy[pn]:
+ if (pn + ld.version) in source_pn:
+ prefix = ld.version
+
+ if prefix and prefix in legacy_versions:
+ upstream_versions[source_pn] = legacy_versions[prefix]
+ continue
+
+ # otherwise, just use the newest version
upstream_versions[source_pn] = newest_version
if pn == last_pn: