瀏覽代碼

Merge pull request #4514 from jyapayne/cache_from

Add cache_from as an available command
Joffrey F 8 年之前
父節點
當前提交
d7df36d4e1
共有 4 個文件被更改,包括 20 次插入1 次删除
  1. 2 1
      compose/config/config_schema_v3.1.json
  2. 1 0
      compose/service.py
  3. 15 0
      tests/integration/service_test.py
  4. 2 0
      tests/unit/service_test.py

+ 2 - 1
compose/config/config_schema_v3.1.json

@@ -71,7 +71,8 @@
               "properties": {
               "properties": {
                 "context": {"type": "string"},
                 "context": {"type": "string"},
                 "dockerfile": {"type": "string"},
                 "dockerfile": {"type": "string"},
-                "args": {"$ref": "#/definitions/list_or_dict"}
+                "args": {"$ref": "#/definitions/list_or_dict"},
+                "cache_from": {"type": "#/definitions/list_of_strings"}
               },
               },
               "additionalProperties": false
               "additionalProperties": false
             }
             }

+ 1 - 0
compose/service.py

@@ -802,6 +802,7 @@ class Service(object):
             nocache=no_cache,
             nocache=no_cache,
             dockerfile=build_opts.get('dockerfile', None),
             dockerfile=build_opts.get('dockerfile', None),
             buildargs=build_opts.get('args', None),
             buildargs=build_opts.get('args', None),
+            cache_from=build_opts.get('cache_from', None),
         )
         )
 
 
         try:
         try:

+ 15 - 0
tests/integration/service_test.py

@@ -32,6 +32,7 @@ from compose.service import NetworkMode
 from compose.service import Service
 from compose.service import Service
 from tests.integration.testcases import v2_1_only
 from tests.integration.testcases import v2_1_only
 from tests.integration.testcases import v2_only
 from tests.integration.testcases import v2_only
+from tests.integration.testcases import v3_only
 
 
 
 
 def create_and_start_container(service, **override_options):
 def create_and_start_container(service, **override_options):
@@ -946,6 +947,20 @@ class ServiceTest(DockerClientTestCase):
         }.items():
         }.items():
             self.assertEqual(env[k], v)
             self.assertEqual(env[k], v)
 
 
+    @v3_only()
+    def test_build_with_cachefrom(self):
+        base_dir = tempfile.mkdtemp()
+        self.addCleanup(shutil.rmtree, base_dir)
+
+        with open(os.path.join(base_dir, 'Dockerfile'), 'w') as f:
+            f.write("FROM busybox\n")
+
+        service = self.create_service('cache_from',
+                                      build={'context': base_dir,
+                                             'cache_from': ['build1']})
+        service.build()
+        assert service.image()
+
     @mock.patch.dict(os.environ)
     @mock.patch.dict(os.environ)
     def test_resolve_env(self):
     def test_resolve_env(self):
         os.environ['FILE_DEF'] = 'E1'
         os.environ['FILE_DEF'] = 'E1'

+ 2 - 0
tests/unit/service_test.py

@@ -446,6 +446,7 @@ class ServiceTest(unittest.TestCase):
             nocache=False,
             nocache=False,
             rm=True,
             rm=True,
             buildargs=None,
             buildargs=None,
+            cache_from=None,
         )
         )
 
 
     def test_ensure_image_exists_no_build(self):
     def test_ensure_image_exists_no_build(self):
@@ -482,6 +483,7 @@ class ServiceTest(unittest.TestCase):
             nocache=False,
             nocache=False,
             rm=True,
             rm=True,
             buildargs=None,
             buildargs=None,
+            cache_from=None,
         )
         )
 
 
     def test_build_does_not_pull(self):
     def test_build_does_not_pull(self):