mirror of
https://github.com/docker/compose.git
synced 2025-04-08 17:05:13 +02:00
Merge branch 'ulyssessouza-6245-docker-compose-multiple-push'
This commit is contained in:
commit
c139455fce
@ -29,6 +29,7 @@ from .service import ContainerNetworkMode
|
||||
from .service import ContainerPidMode
|
||||
from .service import ConvergenceStrategy
|
||||
from .service import NetworkMode
|
||||
from .service import parse_repository_tag
|
||||
from .service import PidMode
|
||||
from .service import Service
|
||||
from .service import ServiceNetworkMode
|
||||
@ -592,8 +593,15 @@ class Project(object):
|
||||
service.pull(ignore_pull_failures, silent=silent)
|
||||
|
||||
def push(self, service_names=None, ignore_push_failures=False):
|
||||
unique_images = set()
|
||||
for service in self.get_services(service_names, include_deps=False):
|
||||
service.push(ignore_push_failures)
|
||||
# Considering <image> and <image:latest> as the same
|
||||
repo, tag, sep = parse_repository_tag(service.image_name)
|
||||
service_image_name = sep.join((repo, tag)) if tag else sep.join((repo, 'latest'))
|
||||
|
||||
if service_image_name not in unique_images:
|
||||
service.push(ignore_push_failures)
|
||||
unique_images.add(service_image_name)
|
||||
|
||||
def _labeled_containers(self, stopped=False, one_off=OneOffFilter.exclude):
|
||||
ctnrs = list(filter(None, [
|
||||
|
@ -620,3 +620,23 @@ class ProjectTest(unittest.TestCase):
|
||||
self.mock_client.pull.side_effect = OperationFailedError(b'pull error')
|
||||
with pytest.raises(ProjectError):
|
||||
project.pull(parallel_pull=True)
|
||||
|
||||
def test_avoid_multiple_push(self):
|
||||
service_config_latest = {'image': 'busybox:latest', 'build': '.'}
|
||||
service_config_default = {'image': 'busybox', 'build': '.'}
|
||||
service_config_sha = {
|
||||
'image': 'busybox@sha256:38a203e1986cf79639cfb9b2e1d6e773de84002feea2d4eb006b52004ee8502d',
|
||||
'build': '.'
|
||||
}
|
||||
svc1 = Service('busy1', **service_config_latest)
|
||||
svc1_1 = Service('busy11', **service_config_latest)
|
||||
svc2 = Service('busy2', **service_config_default)
|
||||
svc2_1 = Service('busy21', **service_config_default)
|
||||
svc3 = Service('busy3', **service_config_sha)
|
||||
svc3_1 = Service('busy31', **service_config_sha)
|
||||
project = Project(
|
||||
'composetest', [svc1, svc1_1, svc2, svc2_1, svc3, svc3_1], self.mock_client
|
||||
)
|
||||
with mock.patch('compose.service.Service.push') as fake_push:
|
||||
project.push()
|
||||
assert fake_push.call_count == 2
|
||||
|
Loading…
x
Reference in New Issue
Block a user