@@ -69,18 +69,21 @@ def __init__(self, change_set: ChangeSet):
69
69
self .resolved_parameters = dict ()
70
70
self ._deferred_actions = list ()
71
71
72
- # TODO: use a structured type for the return value
73
72
def execute (self ) -> ChangeSetModelExecutorResult :
73
+ # constructive process
74
74
self .process ()
75
75
76
+ # perform all deferred actions such as deletions. These must happen in reverse from their
77
+ # defined order so that resource dependencies are honoured
78
+ # TODO: errors will stop all rollbacks; get parity on this behaviour
76
79
for action in self ._deferred_actions [::- 1 ]:
77
80
action ()
78
81
79
82
return ChangeSetModelExecutorResult (
80
83
resources = self .resources , parameters = self .resolved_parameters , outputs = self .outputs
81
84
)
82
85
83
- def _defer (self , action : DeferredAction ):
86
+ def _defer_action (self , action : DeferredAction ):
84
87
self ._deferred_actions .append (action )
85
88
86
89
def visit_node_parameter (self , node_parameter : NodeParameter ) -> PreprocEntityDelta :
@@ -279,7 +282,6 @@ def perform_deletion():
279
282
before_properties = before_properties ,
280
283
after_properties = None ,
281
284
)
282
- # Register a Create for the next type.
283
285
self ._process_event (
284
286
ChangeAction .Modify ,
285
287
name ,
@@ -288,7 +290,7 @@ def perform_deletion():
288
290
resource_type = before .resource_type ,
289
291
)
290
292
291
- self ._defer (perform_deletion )
293
+ self ._defer_action (perform_deletion )
292
294
293
295
event = self ._execute_resource_action (
294
296
action = ChangeAction .Add ,
@@ -332,7 +334,7 @@ def perform_deletion():
332
334
resource_type = before .resource_type ,
333
335
)
334
336
335
- self ._defer (perform_deletion )
337
+ self ._defer_action (perform_deletion )
336
338
elif not is_nothing (after ):
337
339
# Case: addition
338
340
self ._process_event (
0 commit comments