ソースを参照

Merge pull request #2612 from dnephin/merge_extends_from_multiple_files

Fix extends with multiple files
Daniel Nephin 9 年 前
コミット
ab98c70dd1
2 ファイル変更33 行追加0 行削除
  1. 2 0
      compose/config/config.py
  2. 31 0
      tests/unit/config/config_test.py

+ 2 - 0
compose/config/config.py

@@ -516,6 +516,8 @@ def merge_service_dicts_from_files(base, override):
     new_service = merge_service_dicts(base, override)
     if 'extends' in override:
         new_service['extends'] = override['extends']
+    elif 'extends' in base:
+        new_service['extends'] = base['extends']
     return new_service
 
 

+ 31 - 0
tests/unit/config/config_test.py

@@ -738,6 +738,37 @@ class ConfigTest(unittest.TestCase):
             }
         ]
 
+    def test_merge_service_dicts_from_files_with_extends_in_base(self):
+        base = {
+            'volumes': ['.:/app'],
+            'extends': {'service': 'app'}
+        }
+        override = {
+            'image': 'alpine:edge',
+        }
+        actual = config.merge_service_dicts_from_files(base, override)
+        assert actual == {
+            'image': 'alpine:edge',
+            'volumes': ['.:/app'],
+            'extends': {'service': 'app'}
+        }
+
+    def test_merge_service_dicts_from_files_with_extends_in_override(self):
+        base = {
+            'volumes': ['.:/app'],
+            'extends': {'service': 'app'}
+        }
+        override = {
+            'image': 'alpine:edge',
+            'extends': {'service': 'foo'}
+        }
+        actual = config.merge_service_dicts_from_files(base, override)
+        assert actual == {
+            'image': 'alpine:edge',
+            'volumes': ['.:/app'],
+            'extends': {'service': 'foo'}
+        }
+
 
 class PortsTest(unittest.TestCase):
     INVALID_PORTS_TYPES = [