Explorar o código

Merge pull request #139 from orchardup/fix-delete-volume

Fix delete volume
Ben Firshman %!s(int64=11) %!d(string=hai) anos
pai
achega
71533791dd
Modificáronse 3 ficheiros con 20 adicións e 10 borrados
  1. 9 5
      fig/cli/main.py
  2. 1 2
      fig/container.py
  3. 10 3
      tests/cli_test.py

+ 9 - 5
fig/cli/main.py

@@ -170,19 +170,23 @@ class TopLevelCommand(Command):
         """
         Remove stopped service containers.
 
-        Usage: rm [SERVICE...]
+        Usage: rm [options] [SERVICE...]
 
         Options:
-            -v    Remove volumes associated with containers
+            --force   Don't ask to confirm removal
+            -v        Remove volumes associated with containers
         """
         all_containers = self.project.containers(service_names=options['SERVICE'], stopped=True)
         stopped_containers = [c for c in all_containers if not c.is_running]
 
         if len(stopped_containers) > 0:
             print("Going to remove", list_containers(stopped_containers))
-            if yesno("Are you sure? [yN] ", default=False):
-                self.project.remove_stopped(service_names=options['SERVICE'],
-                                            remove_volumes=options['-v'])
+            if options.get('--force') \
+                    or yesno("Are you sure? [yN] ", default=False):
+                self.project.remove_stopped(
+                    service_names=options['SERVICE'],
+                    v=options.get('-v', False)
+                )
         else:
             print("No stopped containers")
 

+ 1 - 2
fig/container.py

@@ -112,8 +112,7 @@ class Container(object):
         return self.client.kill(self.id)
 
     def remove(self, **options):
-        v = options.get('remove_volumes', False)
-        return self.client.remove_container(self.id, v=v)
+        return self.client.remove_container(self.id, **options)
 
     def inspect_if_not_inspected(self):
         if not self.has_been_inspected:

+ 10 - 3
tests/cli_test.py

@@ -32,7 +32,7 @@ class CLITestCase(DockerClientTestCase):
         self.assertIn('fig_simple_1', mock_stdout.getvalue())
 
     @patch('sys.stdout', new_callable=StringIO)
-    def test_default_figfile(self, mock_stdout):
+    def test_ps_default_figfile(self, mock_stdout):
         self.command.base_dir = 'tests/fixtures/multiple-figfiles'
         self.command.dispatch(['up', '-d'], None)
         self.command.dispatch(['ps'], None)
@@ -43,7 +43,7 @@ class CLITestCase(DockerClientTestCase):
         self.assertNotIn('fig_yetanother_1', output)
 
     @patch('sys.stdout', new_callable=StringIO)
-    def test_alternate_figfile(self, mock_stdout):
+    def test_ps_alternate_figfile(self, mock_stdout):
         self.command.base_dir = 'tests/fixtures/multiple-figfiles'
         self.command.dispatch(['-f', 'fig2.yml', 'up', '-d'], None)
         self.command.dispatch(['-f', 'fig2.yml', 'ps'], None)
@@ -53,6 +53,14 @@ class CLITestCase(DockerClientTestCase):
         self.assertNotIn('fig_another_1', output)
         self.assertIn('fig_yetanother_1', output)
 
+    def test_rm(self):
+        service = self.command.project.get_service('simple')
+        service.create_container()
+        service.kill()
+        self.assertEqual(len(service.containers(stopped=True)), 1)
+        self.command.dispatch(['rm', '--force'], None)
+        self.assertEqual(len(service.containers(stopped=True)), 0)
+
     def test_scale(self):
         project = self.command.project
 
@@ -74,4 +82,3 @@ class CLITestCase(DockerClientTestCase):
         self.command.scale({'SERVICE=NUM': ['simple=0', 'another=0']})
         self.assertEqual(len(project.get_service('simple').containers()), 0)
         self.assertEqual(len(project.get_service('another').containers()), 0)
-