瀏覽代碼

Extract image tag to digest code into a function

Extract the code in bundle() and config() that translates image tags
into digests into a function named image_digests_for_project().

Signed-off-by: King Chung Huang <[email protected]>
King Chung Huang 8 年之前
父節點
當前提交
962ba5b937
共有 1 個文件被更改,包括 41 次插入74 次删除
  1. 41 74
      compose/cli/main.py

+ 41 - 74
compose/cli/main.py

@@ -263,43 +263,7 @@ class TopLevelCommand(object):
         if not output:
             output = "{}.dab".format(self.project.name)
 
-        with errors.handle_connection_errors(self.project.client):
-            try:
-                image_digests = get_image_digests(
-                    self.project,
-                    allow_push=options['--push-images'],
-                )
-            except MissingDigests as e:
-                def list_images(images):
-                    return "\n".join("    {}".format(name) for name in sorted(images))
-
-                paras = ["Some images are missing digests."]
-
-                if e.needs_push:
-                    command_hint = (
-                        "Use `docker-compose push {}` to push them. "
-                        "You can do this automatically with `docker-compose bundle --push-images`."
-                        .format(" ".join(sorted(e.needs_push)))
-                    )
-                    paras += [
-                        "The following images can be pushed:",
-                        list_images(e.needs_push),
-                        command_hint,
-                    ]
-
-                if e.needs_pull:
-                    command_hint = (
-                        "Use `docker-compose pull {}` to pull them. "
-                        .format(" ".join(sorted(e.needs_pull)))
-                    )
-
-                    paras += [
-                        "The following images need to be pulled:",
-                        list_images(e.needs_pull),
-                        command_hint,
-                    ]
-
-                raise UserError("\n\n".join(paras))
+        image_digests = image_digests_for_project(self.project, options['--push-images'])
 
         with open(output, 'w') as f:
             f.write(serialize_bundle(compose_config, image_digests))
@@ -326,43 +290,7 @@ class TopLevelCommand(object):
 
         if options['--resolve-image-digests']:
             self.project = project_from_options('.', config_options)
-
-            with errors.handle_connection_errors(self.project.client):
-                try:
-                    image_digests = get_image_digests(
-                        self.project,
-                        allow_push=False
-                    )
-                except MissingDigests as e:
-                    def list_images(images):
-                        return "\n".join("    {}".format(name) for name in sorted(images))
-
-                    paras = ["Some images are missing digests."]
-
-                    if e.needs_push:
-                        command_hint = (
-                            "Use `docker-compose push {}` to push them. "
-                            .format(" ".join(sorted(e.needs_push)))
-                        )
-                        paras += [
-                            "The following images can be pushed:",
-                            list_images(e.needs_push),
-                            command_hint,
-                        ]
-
-                    if e.needs_pull:
-                        command_hint = (
-                            "Use `docker-compose pull {}` to pull them. "
-                            .format(" ".join(sorted(e.needs_pull)))
-                        )
-
-                        paras += [
-                            "The following images need to be pulled:",
-                            list_images(e.needs_pull),
-                            command_hint,
-                        ]
-
-                    raise UserError("\n\n".join(paras))
+            image_digests = image_digests_for_project(self.project)
 
         if options['--quiet']:
             return
@@ -1077,6 +1005,45 @@ def timeout_from_opts(options):
     return None if timeout is None else int(timeout)
 
 
+def image_digests_for_project(project, allow_push=False):
+    with errors.handle_connection_errors(project.client):
+        try:
+            return get_image_digests(
+                project,
+                allow_push=allow_push
+            )
+        except MissingDigests as e:
+            def list_images(images):
+                return "\n".join("    {}".format(name) for name in sorted(images))
+
+            paras = ["Some images are missing digests."]
+
+            if e.needs_push:
+                command_hint = (
+                    "Use `docker-compose push {}` to push them. "
+                    .format(" ".join(sorted(e.needs_push)))
+                )
+                paras += [
+                    "The following images can be pushed:",
+                    list_images(e.needs_push),
+                    command_hint,
+                ]
+
+            if e.needs_pull:
+                command_hint = (
+                    "Use `docker-compose pull {}` to pull them. "
+                    .format(" ".join(sorted(e.needs_pull)))
+                )
+
+                paras += [
+                    "The following images need to be pulled:",
+                    list_images(e.needs_pull),
+                    command_hint,
+                ]
+
+            raise UserError("\n\n".join(paras))
+
+
 def exitval_from_opts(options, project):
     exit_value_from = options.get('--exit-code-from')
     if exit_value_from: