This is an automated email from the ASF dual-hosted git repository.
aw pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/yetus.git
The following commit(s) were added to refs/heads/main by this push:
new 0061f37 YETUS-1148. releasedocmaker ranged versions do not work (#244)
0061f37 is described below
commit 0061f37ba11151dd2c84ffdd9c4c89638de70ffb
Author: Allen Wittenauer <[email protected]>
AuthorDate: Wed Dec 8 07:22:38 2021 -0800
YETUS-1148. releasedocmaker ranged versions do not work (#244)
---
.../src/main/python/releasedocmaker/__init__.py | 12 +--
.../src/main/python/releasedocmaker/getversions.py | 108 +++++++++++++++------
2 files changed, 82 insertions(+), 38 deletions(-)
diff --git a/releasedocmaker/src/main/python/releasedocmaker/__init__.py
b/releasedocmaker/src/main/python/releasedocmaker/__init__.py
index 0ef8545..588400f 100755
--- a/releasedocmaker/src/main/python/releasedocmaker/__init__.py
+++ b/releasedocmaker/src/main/python/releasedocmaker/__init__.py
@@ -35,7 +35,7 @@ from time import gmtime, strftime, sleep
sys.dont_write_bytecode = True
# pylint: disable=wrong-import-position
-from .getversions import GetVersions, PythonVersion
+from .getversions import GetVersions, ReleaseVersion
from .jira import (Jira, JiraIter, Linter, RELEASE_VERSION, SORTTYPE,
SORTORDER, BACKWARD_INCOMPATIBLE_LABEL, NUM_RETRIES)
from .utils import get_jira, to_unicode, sanitize_text, processrelnote, Outputs
@@ -71,8 +71,8 @@ ASF_LICENSE = '''
def indexbuilder(title, asf_license, format_string):
"""Write an index file for later conversion using mvn site"""
- versions = glob("[0-9]*.[0-9]*")
- versions = sorted(versions, reverse=True, key=PythonVersion)
+ versions = glob("*[0-9]*.[0-9]*")
+ versions = sorted(versions, reverse=True, key=ReleaseVersion)
with open("index" + EXTENSION, "w", encoding='utf-8') as indexfile:
if asf_license is True:
indexfile.write(ASF_LICENSE)
@@ -97,7 +97,7 @@ def buildindex(title, asf_license):
def buildreadme(title, asf_license):
"""Write an index file for Github using README.md"""
versions = glob("[0-9]*.[0-9]*")
- versions = sorted(versions, reverse=True, key=PythonVersion)
+ versions = sorted(versions, reverse=True, key=ReleaseVersion)
with open("README.md", "w", encoding='utf-8') as indexfile:
if asf_license is True:
indexfile.write(ASF_LICENSE)
@@ -295,7 +295,7 @@ def generate_changelog_line_md(base_url, jira):
sani_prio = sanitize_text(jira.get_priority())
sani_summ = sanitize_text(jira.get_summary())
line = f'* [{sani_jira_id}](' + f'{base_url}/browse/{sani_jira_id})'
- line += f'| *{sani_prio}* | **{sani_summ}**\n'
+ line += f' | *{sani_prio}* | **{sani_summ}**\n'
return line
@@ -333,7 +333,7 @@ def main(): # pylint: disable=too-many-statements,
too-many-branches, too-many-
versions = GetVersions(options.versions, projects,
options.base_url).getlist()
else:
- versions = [PythonVersion(v) for v in options.versions]
+ versions = [ReleaseVersion(v) for v in options.versions]
versions = sorted(versions)
SORTTYPE = options.sorttype
diff --git a/releasedocmaker/src/main/python/releasedocmaker/getversions.py
b/releasedocmaker/src/main/python/releasedocmaker/getversions.py
index 8d2fc62..b63d970 100755
--- a/releasedocmaker/src/main/python/releasedocmaker/getversions.py
+++ b/releasedocmaker/src/main/python/releasedocmaker/getversions.py
@@ -16,38 +16,78 @@
# limitations under the License.
""" Handle versions in JIRA """
+import copy
import http.client
import json
import logging
+import re
import sys
import urllib.error
from .utils import get_jira
-try:
- from pip._vendor.packaging.version import LegacyVersion as PythonVersion
-except ImportError:
- try:
- from setuptools._vendor.packaging.version import LegacyVersion as
PythonVersion
- except ImportError:
- try:
- from pkg_resources._vendor.packaging.version import LegacyVersion
as PythonVersion
- except ImportError:
+class ReleaseVersion:
+ ''' a very simple version handler '''
+
+ def __init__(self, version=None):
+ self.rawversion = version
+ self.rawcomponents = re.split('[ \\.]', version)
+ self.intcomponents = []
+ for value in self.rawcomponents:
try:
- from packaging.version import LegacyVersion as PythonVersion
- except ImportError:
- logging.error(
- "This script requires a packaging module to be installed.")
- sys.exit(1)
+ self.intcomponents.append(int(value))
+ except ValueError:
+ try:
+ self.intcomponents.append(int(value[1:]))
+ except ValueError:
+ self.intcomponents.append(-1)
+
+ def __repr__ (self):
+ return f"ReleaseVersion ('{str(self)}')"
+
+ def __str__(self):
+ return self.rawversion
+
+ def __lt__(self, cmpver): # pylint: disable=too-many-return-statements
+ if isinstance(cmpver, (int,str)):
+ cmpver = ReleaseVersion(cmpver)
+
+ # shortcut
+ if self.rawversion == cmpver.rawversion:
+ return False
+
+ srcver = copy.deepcopy(self)
+
+ if len(srcver.rawcomponents) < len(cmpver.rawcomponents):
+ for index in range(0, len(cmpver.rawcomponents)):
+ srcver.rawcomponents.append('0')
+ srcver.intcomponents.append(0)
+
+ for index, rawvalue in enumerate(srcver.rawcomponents): # pylint:
disable=unused-variable
+ if index+1 > len(cmpver.rawcomponents):
+ cmpver.rawcomponents.append('0')
+ cmpver.intcomponents.append(0)
+
+ intvalue = srcver.intcomponents[index]
+ if intvalue == -1 or cmpver.intcomponents[index] == -1:
+ return self.rawversion < cmpver.rawversion
+
+ if intvalue < cmpver.intcomponents[index]:
+ return True
+
+ if intvalue > cmpver.intcomponents[index]:
+ return False
+
+ return False
class GetVersions: # pylint: disable=too-few-public-methods
""" List of version strings """
def __init__(self, versions, projects, jira_base_url):
- self.newversions = []
- versions = sorted(versions, key=PythonVersion)
- logging.info("Looking for %s through %s", {versions[0]},
- {versions[-1]})
- newversions = set()
+ self.userversions = sorted(versions, key=ReleaseVersion)
+ logging.info("Looking for %s through %s", self.userversions[0],
+ self.userversions[-1])
+
+ serverversions = set()
for project in projects:
url =
f"{jira_base_url}/rest/api/2/project/{project.upper()}/versions"
try:
@@ -58,19 +98,23 @@ class GetVersions: # pylint: disable=too-few-public-methods
datum = json.loads(resp.read())
for data in datum:
- newversions.add(PythonVersion(data['name']))
- newlist = list(newversions.copy())
- newlist.append(PythonVersion(versions[0]))
- newlist.append(PythonVersion(versions[-1]))
- newlist = sorted(newlist)
- start_index = newlist.index(PythonVersion(versions[0]))
- end_index = len(newlist) - 1 - newlist[::-1].index(
- PythonVersion(versions[-1]))
- for newversion in newlist[start_index + 1:end_index]:
- if newversion in newversions:
- logging.info("Adding %s to the list", newversion)
- self.newversions.append(newversion)
+ serverversions.add(data['name'])
+
+ serverversions = sorted(serverversions, key=ReleaseVersion)
+
+ combolist = serverversions + self.userversions
+ comboset = set(combolist)
+ combolist = sorted(comboset, key=ReleaseVersion)
+
+ start_index = combolist.index(self.userversions[0])
+ end_index = combolist.index(self.userversions[-1])
+
+ self.versions = []
+ for candidate in combolist[start_index:end_index+1]:
+ if candidate in serverversions:
+ self.versions.append(candidate)
+ logging.info('Adding %s to the list', candidate)
def getlist(self):
""" Get the list of versions """
- return self.newversions
+ return self.versions