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

Reply via email to