Imported Upstream version 5.4.2 upstream/5.4.2
authorJinWang An <jinwang.an@samsung.com>
Mon, 28 Dec 2020 04:47:20 +0000 (13:47 +0900)
committerJinWang An <jinwang.an@samsung.com>
Mon, 28 Dec 2020 04:47:20 +0000 (13:47 +0900)
.zuul.yaml
ChangeLog
PKG-INFO
pbr.egg-info/PKG-INFO
pbr/packaging.py
pbr/tests/test_packaging.py
tox.ini

index 1244a2adfe6dd3a96985d7498fbb2500b717a5f3..afe7b8316b5cbf7ed91a2c6d0d450e4a01f917c3 100644 (file)
       - openstack-lower-constraints-jobs
       - openstack-python-jobs
       - openstack-python35-jobs
-      - openstack-python36-jobs
-      - openstack-python37-jobs
+      - openstack-python3-train-jobs
       - periodic-stable-jobs
       - publish-openstack-docs-pti
     check:
index 18bbaaa261ef752cae3a6a103af8c0b110bd68e5..4ec34944bd4caf5fa6a4e3e09add0d9d54725bef 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,15 @@
 CHANGES
 =======
 
+5.4.2
+-----
+
+* Add Python 3 Train unit tests
+
 5.4.1
 -----
 
+* Fix parsing on egg names with dashes from git URLs
 
 5.4.0
 -----
index f9ab6de3337cc5063e39e588cb2aa301baba8f93..88e96198f397dd8d247dc45b8ae30f73c37ffdb1 100644 (file)
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pbr
-Version: 5.4.1
+Version: 5.4.2
 Summary: Python Build Reasonableness
 Home-page: https://docs.openstack.org/pbr/latest/
 Author: OpenStack
index f9ab6de3337cc5063e39e588cb2aa301baba8f93..88e96198f397dd8d247dc45b8ae30f73c37ffdb1 100644 (file)
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pbr
-Version: 5.4.1
+Version: 5.4.2
 Summary: Python Build Reasonableness
 Home-page: https://docs.openstack.org/pbr/latest/
 Author: OpenStack
index baffdb21e070fb91c907747270d0e7a1bb281c24..0947de29308f01e6d5d69a7725e2e8a57b6a6d23 100644 (file)
@@ -22,6 +22,16 @@ from __future__ import unicode_literals
 
 from distutils.command import install as du_install
 from distutils import log
+
+# (hberaud) do not use six here to import urlparse
+# to keep this module free from external dependencies
+# to avoid cross dependencies errors on minimal system
+# free from dependencies.
+try:
+    from urllib.parse import urlparse
+except ImportError:
+    from urlparse import urlparse
+
 import email
 import email.errors
 import os
@@ -98,19 +108,31 @@ def get_reqs_from_files(requirements_files):
     return []
 
 
+def egg_fragment(match):
+    return re.sub(r'(?P<PackageName>[\w.-]+)-'
+                  '(?P<GlobalVersion>'
+                  '(?P<VersionTripple>'
+                  '(?P<Major>0|[1-9][0-9]*)\.'
+                  '(?P<Minor>0|[1-9][0-9]*)\.'
+                  '(?P<Patch>0|[1-9][0-9]*)){1}'
+                  '(?P<Tags>(?:\-'
+                  '(?P<Prerelease>(?:(?=[0]{1}[0-9A-Za-z-]{0})(?:[0]{1})|'
+                  '(?=[1-9]{1}[0-9]*[A-Za-z]{0})(?:[0-9]+)|'
+                  '(?=[0-9]*[A-Za-z-]+[0-9A-Za-z-]*)(?:[0-9A-Za-z-]+)){1}'
+                  '(?:\.(?=[0]{1}[0-9A-Za-z-]{0})(?:[0]{1})|'
+                  '\.(?=[1-9]{1}[0-9]*[A-Za-z]{0})(?:[0-9]+)|'
+                  '\.(?=[0-9]*[A-Za-z-]+[0-9A-Za-z-]*)'
+                  '(?:[0-9A-Za-z-]+))*){1}){0,1}(?:\+'
+                  '(?P<Meta>(?:[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))){0,1}))',
+                  r'\g<PackageName>>=\g<GlobalVersion>',
+                  match.groups()[-1])
+
+
 def parse_requirements(requirements_files=None, strip_markers=False):
 
     if requirements_files is None:
         requirements_files = get_requirements_files()
 
-    def egg_fragment(match):
-        # take a versioned egg fragment and return a
-        # versioned package requirement e.g.
-        # nova-1.2.3 becomes nova>=1.2.3
-        return re.sub(r'([\w.]+)-([\w.-]+)',
-                      r'\1>=\2',
-                      match.groups()[-1])
-
     requirements = []
     for line in get_reqs_from_files(requirements_files):
         # Ignore comments
@@ -141,16 +163,19 @@ def parse_requirements(requirements_files=None, strip_markers=False):
         # -e git://github.com/openstack/nova/master#egg=nova
         # -e git://github.com/openstack/nova/master#egg=nova-1.2.3
         # -e git+https://foo.com/zipball#egg=bar&subdirectory=baz
-        if re.match(r'\s*-e\s+', line):
-            line = re.sub(r'\s*-e\s+.*#egg=([^&]+).*$', egg_fragment, line)
-        # such as:
         # http://github.com/openstack/nova/zipball/master#egg=nova
         # http://github.com/openstack/nova/zipball/master#egg=nova-1.2.3
         # git+https://foo.com/zipball#egg=bar&subdirectory=baz
-        elif re.match(r'\s*(https?|git(\+(https|ssh))?):', line):
-            line = re.sub(r'\s*(https?|git(\+(https|ssh))?):.*#egg=([^&]+).*$',
-                          egg_fragment, line)
+        # git+[ssh]://github.com/openstack/nova/zipball/master#egg=nova-1.2.3
+        # hg+[ssh]://github.com/openstack/nova/zipball/master#egg=nova-1.2.3
+        # svn+[proto]://github.com/openstack/nova/zipball/master#egg=nova-1.2.3
         # -f lines are for index locations, and don't get used here
+        if re.match(r'\s*-e\s+', line):
+            extract = re.match(r'\s*-e\s+(.*)$', line)
+            line = extract.group(1)
+        egg = urlparse(line)
+        if egg.scheme:
+            line = re.sub(r'egg=([^&]+).*$', egg_fragment, egg.fragment)
         elif re.match(r'\s*-f\s+', line):
             line = None
             reason = 'Index Location'
@@ -184,7 +209,7 @@ def parse_dependency_links(requirements_files=None):
         if re.match(r'\s*-[ef]\s+', line):
             dependency_links.append(re.sub(r'\s*-[ef]\s+', '', line))
         # lines that are only urls can go in unmolested
-        elif re.match(r'\s*(https?|git(\+(https|ssh))?):', line):
+        elif re.match(r'^\s*(https?|git(\+(https|ssh))?|svn|hg)\S*:', line):
             dependency_links.append(line)
     return dependency_links
 
index 308ae89cb11764cfee56035695ed5d4527ca7312..811715bbcc15b00337f97516a6afeb722f064a1b 100644 (file)
@@ -918,6 +918,179 @@ class TestRequirementParsing(base.BaseTestCase):
             self.assertEqual(exp_parsed, gen_parsed)
 
 
+class TestRepositoryURLDependencies(base.BaseTestCase):
+
+    def setUp(self):
+        super(TestRepositoryURLDependencies, self).setUp()
+        self.requirements = os.path.join(tempfile.mkdtemp(),
+                                         'requirements.txt')
+        with open(self.requirements, 'w') as f:
+            f.write('\n'.join([
+                '-e git+git://git.pro-ject.org/oslo.messaging#egg=oslo.messaging-1.0.0-rc',  # noqa
+                '-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize',  # noqa
+                '-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize-beta',  # noqa
+                '-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta',  # noqa
+                '-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-4.0.1',  # noqa
+                '-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-1.0.0-alpha.beta.1',  # noqa
+                '-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay',  # noqa
+                '-e git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-2.0.0-rc.1+build.123',  # noqa
+                '-e git+git://git.project.org/Proj#egg=Proj1',
+                'git+https://git.project.org/Proj#egg=Proj2-0.0.1',
+                '-e git+ssh://git.project.org/Proj#egg=Proj3',
+                'svn+svn://svn.project.org/svn/Proj#egg=Proj4-0.0.2',
+                '-e svn+http://svn.project.org/svn/Proj/trunk@2019#egg=Proj5',
+                'hg+http://hg.project.org/Proj@da39a3ee5e6b#egg=Proj-0.0.3',
+                '-e hg+http://hg.project.org/Proj@2019#egg=Proj',
+                'hg+http://hg.project.org/Proj@v1.0#egg=Proj-0.0.4',
+                '-e hg+http://hg.project.org/Proj@special_feature#egg=Proj',
+                'git://foo.com/zipball#egg=foo-bar-1.2.4',
+                'pypi-proj1', 'pypi-proj2']))
+
+    def test_egg_fragment(self):
+            expected = [
+                'django-thumborize',
+                'django-thumborize-beta',
+                'django-thumborize2-beta',
+                'django-thumborize2-beta>=4.0.1',
+                'django-thumborize2-beta>=1.0.0-alpha.beta.1',
+                'django-thumborize2-beta>=1.0.0-alpha-a.b-c-long+build.1-aef.1-its-okay',  # noqa
+                'django-thumborize2-beta>=2.0.0-rc.1+build.123',
+                'django-thumborize-beta>=0.0.4',
+                'django-thumborize-beta>=1.2.3',
+                'django-thumborize-beta>=10.20.30',
+                'django-thumborize-beta>=1.1.2-prerelease+meta',
+                'django-thumborize-beta>=1.1.2+meta',
+                'django-thumborize-beta>=1.1.2+meta-valid',
+                'django-thumborize-beta>=1.0.0-alpha',
+                'django-thumborize-beta>=1.0.0-beta',
+                'django-thumborize-beta>=1.0.0-alpha.beta',
+                'django-thumborize-beta>=1.0.0-alpha.beta.1',
+                'django-thumborize-beta>=1.0.0-alpha.1',
+                'django-thumborize-beta>=1.0.0-alpha0.valid',
+                'django-thumborize-beta>=1.0.0-alpha.0valid',
+                'django-thumborize-beta>=1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay',  # noqa
+                'django-thumborize-beta>=1.0.0-rc.1+build.1',
+                'django-thumborize-beta>=2.0.0-rc.1+build.123',
+                'django-thumborize-beta>=1.2.3-beta',
+                'django-thumborize-beta>=10.2.3-DEV-SNAPSHOT',
+                'django-thumborize-beta>=1.2.3-SNAPSHOT-123',
+                'django-thumborize-beta>=1.0.0',
+                'django-thumborize-beta>=2.0.0',
+                'django-thumborize-beta>=1.1.7',
+                'django-thumborize-beta>=2.0.0+build.1848',
+                'django-thumborize-beta>=2.0.1-alpha.1227',
+                'django-thumborize-beta>=1.0.0-alpha+beta',
+                'django-thumborize-beta>=1.2.3----RC-SNAPSHOT.12.9.1--.12+788',
+                'django-thumborize-beta>=1.2.3----R-S.12.9.1--.12+meta',
+                'django-thumborize-beta>=1.2.3----RC-SNAPSHOT.12.9.1--.12',
+                'django-thumborize-beta>=1.0.0+0.build.1-rc.10000aaa-kk-0.1',
+                'django-thumborize-beta>=999999999999999999.99999999999999.9999999999999',  # noqa
+                'Proj1',
+                'Proj2>=0.0.1',
+                'Proj3',
+                'Proj4>=0.0.2',
+                'Proj5',
+                'Proj>=0.0.3',
+                'Proj',
+                'Proj>=0.0.4',
+                'Proj',
+                'foo-bar>=1.2.4',
+            ]
+            tests = [
+                'egg=django-thumborize',
+                'egg=django-thumborize-beta',
+                'egg=django-thumborize2-beta',
+                'egg=django-thumborize2-beta-4.0.1',
+                'egg=django-thumborize2-beta-1.0.0-alpha.beta.1',
+                'egg=django-thumborize2-beta-1.0.0-alpha-a.b-c-long+build.1-aef.1-its-okay',  # noqa
+                'egg=django-thumborize2-beta-2.0.0-rc.1+build.123',
+                'egg=django-thumborize-beta-0.0.4',
+                'egg=django-thumborize-beta-1.2.3',
+                'egg=django-thumborize-beta-10.20.30',
+                'egg=django-thumborize-beta-1.1.2-prerelease+meta',
+                'egg=django-thumborize-beta-1.1.2+meta',
+                'egg=django-thumborize-beta-1.1.2+meta-valid',
+                'egg=django-thumborize-beta-1.0.0-alpha',
+                'egg=django-thumborize-beta-1.0.0-beta',
+                'egg=django-thumborize-beta-1.0.0-alpha.beta',
+                'egg=django-thumborize-beta-1.0.0-alpha.beta.1',
+                'egg=django-thumborize-beta-1.0.0-alpha.1',
+                'egg=django-thumborize-beta-1.0.0-alpha0.valid',
+                'egg=django-thumborize-beta-1.0.0-alpha.0valid',
+                'egg=django-thumborize-beta-1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay',  # noqa
+                'egg=django-thumborize-beta-1.0.0-rc.1+build.1',
+                'egg=django-thumborize-beta-2.0.0-rc.1+build.123',
+                'egg=django-thumborize-beta-1.2.3-beta',
+                'egg=django-thumborize-beta-10.2.3-DEV-SNAPSHOT',
+                'egg=django-thumborize-beta-1.2.3-SNAPSHOT-123',
+                'egg=django-thumborize-beta-1.0.0',
+                'egg=django-thumborize-beta-2.0.0',
+                'egg=django-thumborize-beta-1.1.7',
+                'egg=django-thumborize-beta-2.0.0+build.1848',
+                'egg=django-thumborize-beta-2.0.1-alpha.1227',
+                'egg=django-thumborize-beta-1.0.0-alpha+beta',
+                'egg=django-thumborize-beta-1.2.3----RC-SNAPSHOT.12.9.1--.12+788',  # noqa
+                'egg=django-thumborize-beta-1.2.3----R-S.12.9.1--.12+meta',
+                'egg=django-thumborize-beta-1.2.3----RC-SNAPSHOT.12.9.1--.12',
+                'egg=django-thumborize-beta-1.0.0+0.build.1-rc.10000aaa-kk-0.1',  # noqa
+                'egg=django-thumborize-beta-999999999999999999.99999999999999.9999999999999',  # noqa
+                'egg=Proj1',
+                'egg=Proj2-0.0.1',
+                'egg=Proj3',
+                'egg=Proj4-0.0.2',
+                'egg=Proj5',
+                'egg=Proj-0.0.3',
+                'egg=Proj',
+                'egg=Proj-0.0.4',
+                'egg=Proj',
+                'egg=foo-bar-1.2.4',
+            ]
+            for index, test in enumerate(tests):
+                self.assertEqual(expected[index],
+                                 re.sub(r'egg=([^&]+).*$',
+                                        packaging.egg_fragment,
+                                        test))
+
+    def test_parse_repo_url_requirements(self):
+        result = packaging.parse_requirements([self.requirements])
+        self.assertEqual(['oslo.messaging>=1.0.0-rc',
+                          'django-thumborize',
+                          'django-thumborize-beta',
+                          'django-thumborize2-beta',
+                          'django-thumborize2-beta>=4.0.1',
+                          'django-thumborize2-beta>=1.0.0-alpha.beta.1',
+                          'django-thumborize2-beta>=1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay',  # noqa
+                          'django-thumborize2-beta>=2.0.0-rc.1+build.123',
+                          'Proj1', 'Proj2>=0.0.1', 'Proj3',
+                          'Proj4>=0.0.2', 'Proj5', 'Proj>=0.0.3',
+                          'Proj', 'Proj>=0.0.4', 'Proj',
+                          'foo-bar>=1.2.4', 'pypi-proj1',
+                          'pypi-proj2'], result)
+
+    def test_parse_repo_url_dependency_links(self):
+        result = packaging.parse_dependency_links([self.requirements])
+        self.assertEqual(
+            [
+             'git+git://git.pro-ject.org/oslo.messaging#egg=oslo.messaging-1.0.0-rc',  # noqa
+             'git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize',  # noqa
+             'git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize-beta',  # noqa
+             'git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta',  # noqa
+             'git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-4.0.1',  # noqa
+             'git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-1.0.0-alpha.beta.1',  # noqa
+             'git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay',  # noqa
+             'git+git://git.pro-ject.org/django-thumborize#egg=django-thumborize2-beta-2.0.0-rc.1+build.123',  # noqa
+             'git+git://git.project.org/Proj#egg=Proj1',
+             'git+https://git.project.org/Proj#egg=Proj2-0.0.1',
+             'git+ssh://git.project.org/Proj#egg=Proj3',
+             'svn+svn://svn.project.org/svn/Proj#egg=Proj4-0.0.2',
+             'svn+http://svn.project.org/svn/Proj/trunk@2019#egg=Proj5',
+             'hg+http://hg.project.org/Proj@da39a3ee5e6b#egg=Proj-0.0.3',
+             'hg+http://hg.project.org/Proj@2019#egg=Proj',
+             'hg+http://hg.project.org/Proj@v1.0#egg=Proj-0.0.4',
+             'hg+http://hg.project.org/Proj@special_feature#egg=Proj',
+             'git://foo.com/zipball#egg=foo-bar-1.2.4'], result)
+
+
 def get_soabi():
     soabi = None
     try:
diff --git a/tox.ini b/tox.ini
index 7ae6f9e0c392b11e97d68f65e5e383c5c514cc98..ca870027208db5e3191253a686161a5b759e7a92 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,6 @@
 [tox]
 minversion = 3.1
-envlist = pep8,py27,py36,py37,docs
+envlist = pep8,py27,py37,docs
 ignore_basepython_conflict = True
 
 [testenv]