diff --git a/files/0001-Support-PyYAML-5.1.patch b/files/0001-Support-PyYAML-5.1.patch new file mode 100644 --- /dev/null +++ b/files/0001-Support-PyYAML-5.1.patch @@ -0,0 +1,251 @@ +From 6d6bf88d9a400cd1b4c99626e307a7b53d746d5a Mon Sep 17 00:00:00 2001 +From: Pierre-Yves +Date: Fri, 16 Aug 2019 22:08:55 +0200 +Subject: [PATCH] Support PyYAML 5.1 + +Signed-off-by: Pierre-Yves +--- + setup.py | 2 +- + tests/acceptance/cli_test.py | 28 ++++++++++++++-------------- + tests/unit/config/config_test.py | 20 ++++++++++---------- + 3 files changed, 25 insertions(+), 25 deletions(-) + +diff --git a/setup.py b/setup.py +index a4020df..1c1e06f 100644 +--- a/setup.py ++++ b/setup.py +@@ -32,7 +32,7 @@ def find_version(*file_paths): + install_requires = [ + 'cached-property >= 1.2.0, < 2', + 'docopt >= 0.6.1, < 1', +- 'PyYAML >= 3.10, < 5', ++ 'PyYAML >= 3.10', + 'requests >= 2.20.0, < 3', + 'texttable >= 0.9.0, < 2', + 'websocket-client >= 0.32.0, < 1', +diff --git a/tests/acceptance/cli_test.py b/tests/acceptance/cli_test.py +index 77b46c2..48e3636 100644 +--- a/tests/acceptance/cli_test.py ++++ b/tests/acceptance/cli_test.py +@@ -257,7 +257,7 @@ class CLITestCase(DockerClientTestCase): + # assert there are no python objects encoded in the output + assert '!!' not in result.stdout + +- output = yaml.load(result.stdout) ++ output = yaml.safe_load(result.stdout) + expected = { + 'version': '2.0', + 'volumes': {'data': {'driver': 'local'}}, +@@ -282,7 +282,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_restart(self): + self.base_dir = 'tests/fixtures/restart' + result = self.dispatch(['config']) +- assert yaml.load(result.stdout) == { ++ assert yaml.safe_load(result.stdout) == { + 'version': '2.0', + 'services': { + 'never': { +@@ -311,7 +311,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_external_network(self): + self.base_dir = 'tests/fixtures/networks' + result = self.dispatch(['-f', 'external-networks.yml', 'config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert 'networks' in json_result + assert json_result['networks'] == { + 'networks_foo': { +@@ -325,7 +325,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_with_dot_env(self): + self.base_dir = 'tests/fixtures/default-env-file' + result = self.dispatch(['config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert json_result == { + 'services': { + 'web': { +@@ -340,7 +340,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_with_env_file(self): + self.base_dir = 'tests/fixtures/default-env-file' + result = self.dispatch(['--env-file', '.env2', 'config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert json_result == { + 'services': { + 'web': { +@@ -355,7 +355,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_with_dot_env_and_override_dir(self): + self.base_dir = 'tests/fixtures/default-env-file' + result = self.dispatch(['--project-directory', 'alt/', 'config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert json_result == { + 'services': { + 'web': { +@@ -370,7 +370,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_external_volume_v2(self): + self.base_dir = 'tests/fixtures/volumes' + result = self.dispatch(['-f', 'external-volumes-v2.yml', 'config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert 'volumes' in json_result + assert json_result['volumes'] == { + 'foo': { +@@ -386,7 +386,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_external_volume_v2_x(self): + self.base_dir = 'tests/fixtures/volumes' + result = self.dispatch(['-f', 'external-volumes-v2-x.yml', 'config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert 'volumes' in json_result + assert json_result['volumes'] == { + 'foo': { +@@ -402,7 +402,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_external_volume_v3_x(self): + self.base_dir = 'tests/fixtures/volumes' + result = self.dispatch(['-f', 'external-volumes-v3-x.yml', 'config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert 'volumes' in json_result + assert json_result['volumes'] == { + 'foo': { +@@ -418,7 +418,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_external_volume_v3_4(self): + self.base_dir = 'tests/fixtures/volumes' + result = self.dispatch(['-f', 'external-volumes-v3-4.yml', 'config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert 'volumes' in json_result + assert json_result['volumes'] == { + 'foo': { +@@ -434,7 +434,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_external_network_v3_5(self): + self.base_dir = 'tests/fixtures/networks' + result = self.dispatch(['-f', 'external-networks-v3-5.yml', 'config']) +- json_result = yaml.load(result.stdout) ++ json_result = yaml.safe_load(result.stdout) + assert 'networks' in json_result + assert json_result['networks'] == { + 'foo': { +@@ -450,7 +450,7 @@ class CLITestCase(DockerClientTestCase): + def test_config_v1(self): + self.base_dir = 'tests/fixtures/v1-config' + result = self.dispatch(['config']) +- assert yaml.load(result.stdout) == { ++ assert yaml.safe_load(result.stdout) == { + 'version': '2.1', + 'services': { + 'net': { +@@ -475,7 +475,7 @@ class CLITestCase(DockerClientTestCase): + self.base_dir = 'tests/fixtures/v3-full' + result = self.dispatch(['config']) + +- assert yaml.load(result.stdout) == { ++ assert yaml.safe_load(result.stdout) == { + 'version': '3.5', + 'volumes': { + 'foobar': { +@@ -552,7 +552,7 @@ class CLITestCase(DockerClientTestCase): + self.base_dir = 'tests/fixtures/compatibility-mode' + result = self.dispatch(['--compatibility', 'config']) + +- assert yaml.load(result.stdout) == { ++ assert yaml.safe_load(result.stdout) == { + 'version': '2.3', + 'volumes': {'foo': {'driver': 'default'}}, + 'networks': {'bar': {}}, +diff --git a/tests/unit/config/config_test.py b/tests/unit/config/config_test.py +index b583422..7726c0a 100644 +--- a/tests/unit/config/config_test.py ++++ b/tests/unit/config/config_test.py +@@ -5031,7 +5031,7 @@ class HealthcheckTest(unittest.TestCase): + }) + ) + +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + serialized_service = serialized_config['services']['test'] + + assert serialized_service['healthcheck'] == { +@@ -5058,7 +5058,7 @@ class HealthcheckTest(unittest.TestCase): + }) + ) + +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + serialized_service = serialized_config['services']['test'] + + assert serialized_service['healthcheck'] == { +@@ -5265,7 +5265,7 @@ class SerializeTest(unittest.TestCase): + 'secrets': secrets_dict + })) + +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + serialized_service = serialized_config['services']['web'] + assert secret_sort(serialized_service['secrets']) == secret_sort(service_dict['secrets']) + assert 'secrets' in serialized_config +@@ -5280,7 +5280,7 @@ class SerializeTest(unittest.TestCase): + } + ], volumes={}, networks={}, secrets={}, configs={}) + +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + assert '8080:80/tcp' in serialized_config['services']['web']['ports'] + + def test_serialize_ports_with_ext_ip(self): +@@ -5292,7 +5292,7 @@ class SerializeTest(unittest.TestCase): + } + ], volumes={}, networks={}, secrets={}, configs={}) + +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + assert '127.0.0.1:8080:80/tcp' in serialized_config['services']['web']['ports'] + + def test_serialize_configs(self): +@@ -5320,7 +5320,7 @@ class SerializeTest(unittest.TestCase): + 'configs': configs_dict + })) + +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + serialized_service = serialized_config['services']['web'] + assert secret_sort(serialized_service['configs']) == secret_sort(service_dict['configs']) + assert 'configs' in serialized_config +@@ -5360,7 +5360,7 @@ class SerializeTest(unittest.TestCase): + } + config_dict = config.load(build_config_details(cfg)) + +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + serialized_service = serialized_config['services']['web'] + assert serialized_service['environment']['CURRENCY'] == '$$' + assert serialized_service['command'] == 'echo $$FOO' +@@ -5382,7 +5382,7 @@ class SerializeTest(unittest.TestCase): + } + config_dict = config.load(build_config_details(cfg), interpolate=False) + +- serialized_config = yaml.load(serialize_config(config_dict, escape_dollar=False)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict, escape_dollar=False)) + serialized_service = serialized_config['services']['web'] + assert serialized_service['environment']['CURRENCY'] == '$' + assert serialized_service['command'] == 'echo $FOO' +@@ -5401,7 +5401,7 @@ class SerializeTest(unittest.TestCase): + + config_dict = config.load(build_config_details(cfg)) + +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + serialized_service = serialized_config['services']['web'] + assert serialized_service['command'] == 'echo 十六夜 咲夜' + +@@ -5417,6 +5417,6 @@ class SerializeTest(unittest.TestCase): + } + + config_dict = config.load(build_config_details(cfg)) +- serialized_config = yaml.load(serialize_config(config_dict)) ++ serialized_config = yaml.safe_load(serialize_config(config_dict)) + serialized_volume = serialized_config['volumes']['test'] + assert serialized_volume['external'] is False +-- +2.22.0 + diff --git a/package.yml b/package.yml --- a/package.yml +++ b/package.yml @@ -1,6 +1,6 @@ name : docker-compose version : 1.25.0_rc2 -release : 19 +release : 20 source : - https://github.com/docker/compose/archive/1.25.0-rc2.tar.gz : 3b8b8f5ef64a5dc3bf3adc0c67948f18db30e960d00f8a452903e1231d64b709 license : Apache-2.0 @@ -30,6 +30,8 @@ - python-jsonschema - python-texttable - pyyaml +setup : | + %patch -p1 < $pkgfiles/0001-Support-PyYAML-5.1.patch build : | %python3_setup install : | diff --git a/pspec_x86_64.xml b/pspec_x86_64.xml --- a/pspec_x86_64.xml +++ b/pspec_x86_64.xml @@ -2,8 +2,8 @@ docker-compose - Joshua Strobl - joshua@stroblindustries.com + Pierre-Yves + pyu@riseup.net Apache-2.0 virt @@ -121,12 +121,12 @@ - - 2019-08-08 + + 2019-08-16 1.25.0_rc2 Packaging update - Joshua Strobl - joshua@stroblindustries.com + Pierre-Yves + pyu@riseup.net \ No newline at end of file