mirror of https://github.com/docker/compose.git
Merge pull request #2041 from ggtools/master
Add new --pull option in build.
This commit is contained in:
commit
3e58003bd3
|
@ -153,9 +153,11 @@ class TopLevelCommand(Command):
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--no-cache Do not use cache when building the image.
|
--no-cache Do not use cache when building the image.
|
||||||
|
--pull Always attempt to pull a newer version of the image.
|
||||||
"""
|
"""
|
||||||
no_cache = bool(options.get('--no-cache', False))
|
no_cache = bool(options.get('--no-cache', False))
|
||||||
project.build(service_names=options['SERVICE'], no_cache=no_cache)
|
pull = bool(options.get('--pull', False))
|
||||||
|
project.build(service_names=options['SERVICE'], no_cache=no_cache, pull=pull)
|
||||||
|
|
||||||
def help(self, project, options):
|
def help(self, project, options):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -257,10 +257,10 @@ class Project(object):
|
||||||
for service in self.get_services(service_names):
|
for service in self.get_services(service_names):
|
||||||
service.restart(**options)
|
service.restart(**options)
|
||||||
|
|
||||||
def build(self, service_names=None, no_cache=False):
|
def build(self, service_names=None, no_cache=False, pull=False):
|
||||||
for service in self.get_services(service_names):
|
for service in self.get_services(service_names):
|
||||||
if service.can_be_built():
|
if service.can_be_built():
|
||||||
service.build(no_cache)
|
service.build(no_cache, pull)
|
||||||
else:
|
else:
|
||||||
log.info('%s uses an image, skipping' % service.name)
|
log.info('%s uses an image, skipping' % service.name)
|
||||||
|
|
||||||
|
|
|
@ -701,7 +701,7 @@ class Service(object):
|
||||||
ipc_mode=options.get('ipc')
|
ipc_mode=options.get('ipc')
|
||||||
)
|
)
|
||||||
|
|
||||||
def build(self, no_cache=False):
|
def build(self, no_cache=False, pull=False):
|
||||||
log.info('Building %s' % self.name)
|
log.info('Building %s' % self.name)
|
||||||
|
|
||||||
path = self.options['build']
|
path = self.options['build']
|
||||||
|
@ -715,7 +715,7 @@ class Service(object):
|
||||||
tag=self.image_name,
|
tag=self.image_name,
|
||||||
stream=True,
|
stream=True,
|
||||||
rm=True,
|
rm=True,
|
||||||
pull=False,
|
pull=pull,
|
||||||
nocache=no_cache,
|
nocache=no_cache,
|
||||||
dockerfile=self.options.get('dockerfile', None),
|
dockerfile=self.options.get('dockerfile', None),
|
||||||
)
|
)
|
||||||
|
|
|
@ -16,6 +16,7 @@ Usage: build [options] [SERVICE...]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--no-cache Do not use cache when building the image.
|
--no-cache Do not use cache when building the image.
|
||||||
|
--pull Always attempt to pull a newer version of the image.
|
||||||
```
|
```
|
||||||
|
|
||||||
Services are built once and then tagged as `project_service`, e.g.,
|
Services are built once and then tagged as `project_service`, e.g.,
|
||||||
|
|
|
@ -97,6 +97,19 @@ class CLITestCase(DockerClientTestCase):
|
||||||
'Pulling digest (busybox@'
|
'Pulling digest (busybox@'
|
||||||
'sha256:38a203e1986cf79639cfb9b2e1d6e773de84002feea2d4eb006b52004ee8502d)...')
|
'sha256:38a203e1986cf79639cfb9b2e1d6e773de84002feea2d4eb006b52004ee8502d)...')
|
||||||
|
|
||||||
|
@mock.patch('sys.stdout', new_callable=StringIO)
|
||||||
|
def test_build_plain(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'
|
||||||
|
pull_indicator = 'Status: Image is up to date for busybox:latest'
|
||||||
|
self.command.dispatch(['build', 'simple'], None)
|
||||||
|
output = mock_stdout.getvalue()
|
||||||
|
self.assertIn(cache_indicator, output)
|
||||||
|
self.assertNotIn(pull_indicator, output)
|
||||||
|
|
||||||
@mock.patch('sys.stdout', new_callable=StringIO)
|
@mock.patch('sys.stdout', new_callable=StringIO)
|
||||||
def test_build_no_cache(self, mock_stdout):
|
def test_build_no_cache(self, mock_stdout):
|
||||||
self.command.base_dir = 'tests/fixtures/simple-dockerfile'
|
self.command.base_dir = 'tests/fixtures/simple-dockerfile'
|
||||||
|
@ -104,14 +117,37 @@ class CLITestCase(DockerClientTestCase):
|
||||||
|
|
||||||
mock_stdout.truncate(0)
|
mock_stdout.truncate(0)
|
||||||
cache_indicator = 'Using cache'
|
cache_indicator = 'Using cache'
|
||||||
self.command.dispatch(['build', 'simple'], None)
|
pull_indicator = 'Status: Image is up to date for busybox:latest'
|
||||||
output = mock_stdout.getvalue()
|
|
||||||
self.assertIn(cache_indicator, output)
|
|
||||||
|
|
||||||
mock_stdout.truncate(0)
|
|
||||||
self.command.dispatch(['build', '--no-cache', 'simple'], None)
|
self.command.dispatch(['build', '--no-cache', 'simple'], None)
|
||||||
output = mock_stdout.getvalue()
|
output = mock_stdout.getvalue()
|
||||||
self.assertNotIn(cache_indicator, output)
|
self.assertNotIn(cache_indicator, output)
|
||||||
|
self.assertNotIn(pull_indicator, output)
|
||||||
|
|
||||||
|
@mock.patch('sys.stdout', new_callable=StringIO)
|
||||||
|
def test_build_pull(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'
|
||||||
|
pull_indicator = 'Status: Image is up to date for busybox:latest'
|
||||||
|
self.command.dispatch(['build', '--pull', 'simple'], None)
|
||||||
|
output = mock_stdout.getvalue()
|
||||||
|
self.assertIn(cache_indicator, output)
|
||||||
|
self.assertIn(pull_indicator, output)
|
||||||
|
|
||||||
|
@mock.patch('sys.stdout', new_callable=StringIO)
|
||||||
|
def test_build_no_cache_pull(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'
|
||||||
|
pull_indicator = 'Status: Image is up to date for busybox:latest'
|
||||||
|
self.command.dispatch(['build', '--no-cache', '--pull', 'simple'], None)
|
||||||
|
output = mock_stdout.getvalue()
|
||||||
|
self.assertNotIn(cache_indicator, output)
|
||||||
|
self.assertIn(pull_indicator, output)
|
||||||
|
|
||||||
def test_up_detached(self):
|
def test_up_detached(self):
|
||||||
self.command.dispatch(['up', '-d'], None)
|
self.command.dispatch(['up', '-d'], None)
|
||||||
|
|
Loading…
Reference in New Issue