mirror of
https://github.com/docker/compose.git
synced 2025-07-26 07:04:32 +02:00
Reduce complexity of sort_service_dicts.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
84a1822e40
commit
cdda616d6b
@ -23,28 +23,31 @@ def get_source_name_from_network_mode(network_mode, source_type):
|
|||||||
return net_name
|
return net_name
|
||||||
|
|
||||||
|
|
||||||
|
def get_service_names(links):
|
||||||
|
return [link.split(':')[0] for link in links]
|
||||||
|
|
||||||
|
|
||||||
|
def get_service_names_from_volumes_from(volumes_from):
|
||||||
|
return [volume_from.source for volume_from in volumes_from]
|
||||||
|
|
||||||
|
|
||||||
|
def get_service_dependents(service_dict, services):
|
||||||
|
name = service_dict['name']
|
||||||
|
return [
|
||||||
|
service for service in services
|
||||||
|
if (name in get_service_names(service.get('links', [])) or
|
||||||
|
name in get_service_names_from_volumes_from(service.get('volumes_from', [])) or
|
||||||
|
name == get_service_name_from_network_mode(service.get('network_mode')) or
|
||||||
|
name in service.get('depends_on', []))
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def sort_service_dicts(services):
|
def sort_service_dicts(services):
|
||||||
# Topological sort (Cormen/Tarjan algorithm).
|
# Topological sort (Cormen/Tarjan algorithm).
|
||||||
unmarked = services[:]
|
unmarked = services[:]
|
||||||
temporary_marked = set()
|
temporary_marked = set()
|
||||||
sorted_services = []
|
sorted_services = []
|
||||||
|
|
||||||
def get_service_names(links):
|
|
||||||
return [link.split(':')[0] for link in links]
|
|
||||||
|
|
||||||
def get_service_names_from_volumes_from(volumes_from):
|
|
||||||
return [volume_from.source for volume_from in volumes_from]
|
|
||||||
|
|
||||||
def get_service_dependents(service_dict, services):
|
|
||||||
name = service_dict['name']
|
|
||||||
return [
|
|
||||||
service for service in services
|
|
||||||
if (name in get_service_names(service.get('links', [])) or
|
|
||||||
name in get_service_names_from_volumes_from(service.get('volumes_from', [])) or
|
|
||||||
name == get_service_name_from_network_mode(service.get('network_mode')) or
|
|
||||||
name in service.get('depends_on', []))
|
|
||||||
]
|
|
||||||
|
|
||||||
def visit(n):
|
def visit(n):
|
||||||
if n['name'] in temporary_marked:
|
if n['name'] in temporary_marked:
|
||||||
if n['name'] in get_service_names(n.get('links', [])):
|
if n['name'] in get_service_names(n.get('links', [])):
|
||||||
|
2
tox.ini
2
tox.ini
@ -45,7 +45,7 @@ directory = coverage-html
|
|||||||
# Allow really long lines for now
|
# Allow really long lines for now
|
||||||
max-line-length = 140
|
max-line-length = 140
|
||||||
# Set this high for now
|
# Set this high for now
|
||||||
max-complexity = 12
|
max-complexity = 11
|
||||||
exclude = compose/packages
|
exclude = compose/packages
|
||||||
|
|
||||||
[pytest]
|
[pytest]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user