瀏覽代碼

Reduce config --hash code complexity and add test

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 7 年之前
父節點
當前提交
861031b9b7
共有 2 個文件被更改,包括 19 次插入12 次删除
  1. 8 12
      compose/cli/main.py
  2. 11 0
      tests/acceptance/cli_test.py

+ 8 - 12
compose/cli/main.py

@@ -328,8 +328,9 @@ class TopLevelCommand(object):
                                      anything.
             --services               Print the service names, one per line.
             --volumes                Print the volume names, one per line.
-            --hash="all"             Print the service config hash, one per line.
-                                     Set "service1,service2" for a list of specified services.
+            --hash="*"               Print the service config hash, one per line.
+                                     Set "service1,service2" for a list of specified services
+                                     or use the wildcard symbol to display all services
         """
 
         compose_config = get_config_from_options(self.project_dir, self.toplevel_options)
@@ -352,17 +353,12 @@ class TopLevelCommand(object):
             return
 
         if options['--hash'] is not None:
+            h = options['--hash']
             self.project = project_from_options('.', self.toplevel_options)
-            if options['--hash'] == "all":
-                for service in self.project.services:
-                    print('{} {}'.format(service.name, service.config_hash))
-            else:
-                for service_name in options['--hash'].split(','):
-                    try:
-                        print('{} {}'.format(service_name,
-                                             self.project.get_service(service_name).config_hash))
-                    except NoSuchService as s:
-                        print('{}'.format(s))
+            services = [svc for svc in options['--hash'].split(',')] if h != '*' else None
+
+            for service in self.project.get_services(services):
+                print('{} {}'.format(service.name, service.config_hash))
             return
 
         print(serialize_config(compose_config, image_digests))

+ 11 - 0
tests/acceptance/cli_test.py

@@ -222,6 +222,17 @@ class CLITestCase(DockerClientTestCase):
         self.base_dir = 'tests/fixtures/v2-full'
         assert self.dispatch(['config', '--quiet']).stdout == ''
 
+    def test_config_with_hash_option(self):
+        self.base_dir = 'tests/fixtures/v2-full'
+        self.project.build()
+        result = self.dispatch(['config', '--hash=*'])
+        for service in self.project.get_services():
+            assert '{} {}\n'.format(service.name, service.config_hash) in result.stdout
+
+        svc = self.project.get_service('other')
+        result = self.dispatch(['config', '--hash=other'])
+        assert result.stdout == '{} {}\n'.format(svc.name, svc.config_hash)
+
     def test_config_default(self):
         self.base_dir = 'tests/fixtures/v2-full'
         result = self.dispatch(['config'])