Merge branch '6245-docker-compose-multiple-push' of https://github.com/ulyssessouza/compose into ulyssessouza-6245-docker-compose-multiple-push

This commit is contained in:
Joffrey F 2018-12-04 17:10:31 -08:00
commit 5b2092688a
2 changed files with 27 additions and 1 deletions

View File

@ -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, [

View File

@ -1995,3 +1995,21 @@ class ProjectTest(DockerClientTestCase):
net_data = self.client.inspect_network(full_net_name)
assert net_data
assert net_data['Labels'][LABEL_PROJECT] == '-dashtest'
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 = self.create_service('busy1', **service_config_latest)
svc1_1 = self.create_service('busy11', **service_config_latest)
svc2 = self.create_service('busy2', **service_config_default)
svc2_1 = self.create_service('busy21', **service_config_default)
svc3 = self.create_service('busy3', **service_config_sha)
svc3_1 = self.create_service('busy31', **service_config_sha)
project = Project('composetest', [svc1, svc1_1, svc2, svc2_1, svc3, svc3_1], self.client)
with mock.patch('compose.service.Service.push') as fake_push:
project.push(ignore_push_failures=True)
assert fake_push.call_count == 2