From 150c44dc364dcb24b3b6b8256e7ec0fce95225fb Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Tue, 23 May 2017 15:17:16 -0700 Subject: [PATCH] Merge all fields inside build dict Signed-off-by: Joffrey F --- compose/config/config.py | 2 + tests/unit/config/config_test.py | 68 ++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/compose/config/config.py b/compose/config/config.py index 2a81b93da..8dac4fb33 100644 --- a/compose/config/config.py +++ b/compose/config/config.py @@ -952,6 +952,8 @@ def merge_build(output, base, override): md.merge_scalar('context') md.merge_scalar('dockerfile') md.merge_mapping('args', parse_build_arguments) + md.merge_field('cache_from', merge_unique_items_lists, default=[]) + md.merge_mapping('labels', parse_labels) return dict(md) diff --git a/tests/unit/config/config_test.py b/tests/unit/config/config_test.py index 357244c2c..d8973484d 100644 --- a/tests/unit/config/config_test.py +++ b/tests/unit/config/config_test.py @@ -2847,6 +2847,74 @@ class MergeLabelsTest(unittest.TestCase): assert service_dict['labels'] == {'foo': '1', 'bar': ''} +class MergeBuildTest(unittest.TestCase): + def test_full(self): + base = { + 'context': '.', + 'dockerfile': 'Dockerfile', + 'args': { + 'x': '1', + 'y': '2', + }, + 'cache_from': ['ubuntu'], + 'labels': ['com.docker.compose.test=true'] + } + + override = { + 'context': './prod', + 'dockerfile': 'Dockerfile.prod', + 'args': ['x=12'], + 'cache_from': ['debian'], + 'labels': { + 'com.docker.compose.test': 'false', + 'com.docker.compose.prod': 'true', + } + } + + result = config.merge_build(None, {'build': base}, {'build': override}) + assert result['context'] == override['context'] + assert result['dockerfile'] == override['dockerfile'] + assert result['args'] == {'x': '12', 'y': '2'} + assert set(result['cache_from']) == set(['ubuntu', 'debian']) + assert result['labels'] == override['labels'] + + def test_empty_override(self): + base = { + 'context': '.', + 'dockerfile': 'Dockerfile', + 'args': { + 'x': '1', + 'y': '2', + }, + 'cache_from': ['ubuntu'], + 'labels': { + 'com.docker.compose.test': 'true' + } + } + + override = {} + + result = config.merge_build(None, {'build': base}, {'build': override}) + assert result == base + + def test_empty_base(self): + base = {} + + override = { + 'context': './prod', + 'dockerfile': 'Dockerfile.prod', + 'args': {'x': '12'}, + 'cache_from': ['debian'], + 'labels': { + 'com.docker.compose.test': 'false', + 'com.docker.compose.prod': 'true', + } + } + + result = config.merge_build(None, {'build': base}, {'build': override}) + assert result == override + + class MemoryOptionsTest(unittest.TestCase): def test_validation_fails_with_just_memswap_limit(self):