@@ -1605,9 +1605,11 @@ def plan_builder(
16051605 backfill_models = None
16061606
16071607 models_override : t .Optional [UniqueKeyDict [str , Model ]] = None
1608+ selected_fqns : t .Set [str ] = set ()
1609+ selected_deletion_fqns : t .Set [str ] = set ()
16081610 if select_models :
16091611 try :
1610- models_override = model_selector .select_models (
1612+ models_override , selected_fqns = model_selector .select_models (
16111613 select_models ,
16121614 environment ,
16131615 fallback_env_name = create_from or c .PROD ,
@@ -1622,12 +1624,17 @@ def plan_builder(
16221624 # Only backfill selected models unless explicitly specified.
16231625 backfill_models = model_selector .expand_model_selections (select_models )
16241626
1627+ if not backfill_models :
1628+ # The selection matched nothing locally. Check whether it matched models
1629+ # in the deployed environment that were deleted locally.
1630+ selected_deletion_fqns = selected_fqns - set (self ._models )
1631+
16251632 expanded_restate_models = None
16261633 if restate_models is not None :
16271634 expanded_restate_models = model_selector .expand_model_selections (restate_models )
16281635
16291636 if (restate_models is not None and not expanded_restate_models ) or (
1630- backfill_models is not None and not backfill_models
1637+ backfill_models is not None and not backfill_models and not selected_deletion_fqns
16311638 ):
16321639 raise PlanError (
16331640 "Selector did not return any models. Please check your model selection and try again."
@@ -1636,7 +1643,7 @@ def plan_builder(
16361643 if always_include_local_changes is None :
16371644 # default behaviour - if restatements are detected; we operate entirely out of state and ignore local changes
16381645 force_no_diff = restate_models is not None or (
1639- backfill_models is not None and not backfill_models
1646+ backfill_models is not None and not backfill_models and not selected_deletion_fqns
16401647 )
16411648 else :
16421649 force_no_diff = not always_include_local_changes
0 commit comments