From 47bbc35b749e48f233f6354bd26de134205f914a Mon Sep 17 00:00:00 2001 From: Mark Steve Samson Date: Tue, 1 Jul 2014 11:08:37 +0800 Subject: [PATCH 1/2] Add `--no-cache` option to `fig build` (Closes #152) Signed-off-by: Mark Steve Samson --- fig/cli/main.py | 8 ++++++-- fig/project.py | 4 ++-- fig/service.py | 5 +++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/fig/cli/main.py b/fig/cli/main.py index 11230331cf..b815f9087c 100644 --- a/fig/cli/main.py +++ b/fig/cli/main.py @@ -103,9 +103,13 @@ class TopLevelCommand(Command): e.g. `figtest_db`. If you change a service's `Dockerfile` or the contents of its build directory, you can run `fig build` to rebuild it. - Usage: build [SERVICE...] + Usage: build [options] [SERVICE...] + + Options: + --no-cache Do not use cache when building the image. """ - self.project.build(service_names=options['SERVICE']) + no_cache = bool(options.get('--no-cache', False)) + self.project.build(service_names=options['SERVICE'], no_cache=no_cache) def help(self, options): """ diff --git a/fig/project.py b/fig/project.py index d8044c7d73..9b3493c422 100644 --- a/fig/project.py +++ b/fig/project.py @@ -154,10 +154,10 @@ class Project(object): for service in reversed(self.get_services(service_names)): service.kill(**options) - def build(self, service_names=None, **options): + def build(self, service_names=None, no_cache=False): for service in self.get_services(service_names): if service.can_be_built(): - service.build(**options) + service.build(no_cache) else: log.info('%s uses an image, skipping' % service.name) diff --git a/fig/service.py b/fig/service.py index 0d29a47c8f..0045b873e9 100644 --- a/fig/service.py +++ b/fig/service.py @@ -356,14 +356,15 @@ class Service(object): return container_options - def build(self): + def build(self, no_cache=False): log.info('Building %s...' % self.name) build_output = self.client.build( self.options['build'], tag=self._build_tag_name(), stream=True, - rm=True + rm=True, + nocache=no_cache, ) try: From 7f06d468271c5e8aad6a280621455e407894219d Mon Sep 17 00:00:00 2001 From: Mark Steve Samson Date: Sun, 20 Jul 2014 16:27:05 +0800 Subject: [PATCH 2/2] Add test for building with --no-cache Signed-off-by: Mark Steve Samson --- tests/fixtures/simple-dockerfile/fig.yml | 2 ++ tests/integration/cli_test.py | 13 +++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 tests/fixtures/simple-dockerfile/fig.yml diff --git a/tests/fixtures/simple-dockerfile/fig.yml b/tests/fixtures/simple-dockerfile/fig.yml new file mode 100644 index 0000000000..a3f56d46f3 --- /dev/null +++ b/tests/fixtures/simple-dockerfile/fig.yml @@ -0,0 +1,2 @@ +simple: + build: tests/fixtures/simple-dockerfile diff --git a/tests/integration/cli_test.py b/tests/integration/cli_test.py index 92aed85fc4..9ab21b4468 100644 --- a/tests/integration/cli_test.py +++ b/tests/integration/cli_test.py @@ -46,6 +46,18 @@ class CLITestCase(DockerClientTestCase): self.assertNotIn('multiplefigfiles_another_1', output) self.assertIn('multiplefigfiles_yetanother_1', output) + @patch('sys.stdout', new_callable=StringIO) + def test_build_no_cache(self, mock_stdout): + self.command.base_dir = 'tests/fixtures/simple-dockerfile' + self.command.dispatch(['build', 'simple'], None) + mock_stdout.truncate(0) + cache_indicator = 'Using cache' + self.command.dispatch(['build', 'simple'], None) + self.assertIn(cache_indicator, output) + mock_stdout.truncate(0) + self.command.dispatch(['build', '--no-cache', 'simple'], None) + self.assertNotIn(cache_indicator, output) + def test_up(self): self.command.dispatch(['up', '-d'], None) service = self.command.project.get_service('simple') @@ -193,3 +205,4 @@ 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) +