summaryrefslogtreecommitdiff
path: root/pbr
diff options
context:
space:
mode:
Diffstat (limited to 'pbr')
-rw-r--r--pbr/packaging.py25
-rw-r--r--pbr/tests/test_packaging.py27
2 files changed, 49 insertions, 3 deletions
diff --git a/pbr/packaging.py b/pbr/packaging.py
index 99fa2ef..18d18e6 100644
--- a/pbr/packaging.py
+++ b/pbr/packaging.py
@@ -24,8 +24,11 @@ from distutils.command import install as du_install
import distutils.errors
from distutils import log
import email
+import functools
import io
+import itertools
import os
+import platform
import re
import subprocess
import sys
@@ -56,10 +59,26 @@ def get_requirements_files():
# Returns a list composed of:
# - REQUIREMENTS_FILES with -py2 or -py3 in the name
# (e.g. requirements-py3.txt)
+ # - REQUIREMENTS_FILES with -{platform.system} in the name
+ # (e.g. requirements-windows.txt)
+ # - REQUIREMENTS_FILES with both Python version and platform's
+ # system in the name
+ # (e.g. requirements-freebsd-py2.txt)
# - REQUIREMENTS_FILES
- return (list(map(('-py' + str(sys.version_info[0])).join,
- map(os.path.splitext, REQUIREMENTS_FILES)))
- + list(REQUIREMENTS_FILES))
+ pyversion = sys.version_info[0]
+ system = platform.system().lower()
+ parts = list(map(os.path.splitext, REQUIREMENTS_FILES))
+
+ version_cb = functools.partial("{1}-py{0}{2}".format, pyversion)
+ platform_cb = functools.partial("{1}-{0}{2}".format, system)
+ both_cb = functools.partial("{2}-{0}-py{1}{3}".format, system, pyversion)
+
+ return list(itertools.chain(
+ itertools.starmap(both_cb, parts),
+ itertools.starmap(platform_cb, parts),
+ itertools.starmap(version_cb, parts),
+ REQUIREMENTS_FILES,
+ ))
def append_text_list(config, key, text_list):
diff --git a/pbr/tests/test_packaging.py b/pbr/tests/test_packaging.py
index a067945..0fdc5bb 100644
--- a/pbr/tests/test_packaging.py
+++ b/pbr/tests/test_packaging.py
@@ -39,6 +39,7 @@
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
import os
+import sys
import tempfile
import fixtures
@@ -214,6 +215,32 @@ class TestNestedRequirements(base.BaseTestCase):
self.assertEqual(result, ['pbr'])
+class TestGetRequirements(base.BaseTestCase):
+
+ def test_get_requirements_file(self):
+ platforms = ['Windows', 'Freebsd', 'Darwin', 'Linux']
+ version = sys.version_info[0]
+
+ with mock.patch('platform.system') as platform_system:
+ platform_system.side_effect = platforms
+
+ for platform in map(str.lower, platforms):
+ expected = [
+ 'requirements-{plat}-py{ver}.txt'.format(
+ plat=platform, ver=version),
+ 'tools/pip-requires-{plat}-py{ver}'.format(
+ plat=platform, ver=version),
+ 'requirements-{0}.txt'.format(platform),
+ 'tools/pip-requires-{0}'.format(platform),
+ 'requirements-py{0}.txt'.format(version),
+ 'tools/pip-requires-py{0}'.format(version),
+ 'requirements.txt',
+ 'tools/pip-requires',
+ ]
+ files = packaging.get_requirements_files()
+ self.assertEqual(expected, files)
+
+
class TestVersions(base.BaseTestCase):
scenarios = [