docker_compose_v2: add ignore_build_events option; ignore build events by default (#1011)

* Add ignore_build_events option.

* Adjust docs and tests.

* Switch default to true.

* Remove unnecessary parts from tests.
This commit is contained in:
Felix Fontein
2024-12-14 19:54:40 +01:00
committed by GitHub
parent 80770ed972
commit 2e7b4e4605
4 changed files with 88 additions and 176 deletions
+23 -3
View File
@@ -57,6 +57,8 @@ DOCKER_STATUS_DONE = frozenset((
'Recreated',
# Extras for pull events
'Pulled',
# Extras for built events
'Built',
))
DOCKER_STATUS_WORKING = frozenset((
'Creating',
@@ -76,6 +78,10 @@ DOCKER_STATUS_PULL = frozenset((
'Pulled',
'Pulling',
))
DOCKER_STATUS_BUILD = frozenset((
'Built',
'Building',
))
DOCKER_STATUS_ERROR = frozenset((
'Error',
))
@@ -542,11 +548,13 @@ def parse_events(stderr, dry_run=False, warn_function=None, nonzero_rc=False):
return events
def has_changes(events, ignore_service_pull_events=False):
def has_changes(events, ignore_service_pull_events=False, ignore_build_events=False):
for event in events:
if event.status in DOCKER_STATUS_WORKING:
if ignore_service_pull_events and event.status in DOCKER_STATUS_PULL:
continue
if ignore_build_events and event.status in DOCKER_STATUS_BUILD:
continue
return True
if event.resource_type == ResourceType.IMAGE_LAYER and event.status in DOCKER_PULL_PROGRESS_WORKING:
return True
@@ -802,8 +810,20 @@ class BaseComposeManager(DockerBaseClass):
def emit_warnings(self, events):
emit_warnings(events, warn_function=self.client.warn)
def update_result(self, result, events, stdout, stderr, ignore_service_pull_events=False):
result['changed'] = result.get('changed', False) or has_changes(events, ignore_service_pull_events=ignore_service_pull_events)
def update_result(
self,
result,
events,
stdout,
stderr,
ignore_service_pull_events=False,
ignore_build_events=False,
):
result['changed'] = result.get('changed', False) or has_changes(
events,
ignore_service_pull_events=ignore_service_pull_events,
ignore_build_events=ignore_build_events,
)
result['actions'] = result.get('actions', []) + extract_actions(events)
result['stdout'] = combine_text_output(result.get('stdout'), to_native(stdout))
result['stderr'] = combine_text_output(result.get('stderr'), to_native(stderr))