@@ -1231,6 +1231,7 @@ def _run(self, i):
12311231
12321232 if default_version in versions :
12331233 versions_meta = versions [default_version ]
1234+ run_state ['version_meta' ] = versions_meta
12341235 r = self .update_state_from_meta (
12351236 versions_meta ,
12361237 run_state ,
@@ -1997,6 +1998,7 @@ def _update_state_from_version(self, meta, run_state, i):
19971998
19981999 if version != '' and version in versions :
19992000 versions_meta = versions [version ]
2001+ run_state ['version_meta' ] = versions_meta
20002002 r = self .update_state_from_meta (
20012003 versions_meta ,
20022004 run_state ,
@@ -2091,20 +2093,58 @@ def _update_state_from_variations(
20912093 if not variation_tags and default_variation and default_variation not in excluded_variation_tags :
20922094 variation_tags = [default_variation ]
20932095
2096+ # Process default_variations from all sources BEFORE per-variation defaults.
2097+ # Priority order (highest first):
2098+ # 1. update_meta_if_env conditional default_variations
2099+ # 2. Script-level default_variations (top-level meta)
2100+ # 3. Version-level default_variations (version meta)
2101+ # 4. Per-variation default_variations (handled in _update_variation_tags_from_variations below)
2102+ #
2103+ # Since _get_variation_tags_from_default_variations only fills groups
2104+ # not already covered, processing higher-priority sources first ensures
2105+ # they win for each group.
2106+ conditional_dv = run_state .get ('conditional_default_variations' , {})
2107+ extra_meta_sources = []
2108+ if conditional_dv :
2109+ extra_meta_sources .append ({'default_variations' : conditional_dv })
2110+ extra_meta_sources .append (meta )
2111+ version_meta = run_state .get ('version_meta' , {})
2112+ if version_meta :
2113+ extra_meta_sources .append (version_meta )
2114+ for extra_meta_source in extra_meta_sources :
2115+ if extra_meta_source and 'default_variations' in extra_meta_source :
2116+ tmp_vt_static = copy .deepcopy (variation_tags )
2117+ for vi in range (len (tmp_vt_static )):
2118+ if tmp_vt_static [vi ] not in variations :
2119+ vs = self ._get_name_for_dynamic_variation_tag (
2120+ tmp_vt_static [vi ])
2121+ if vs :
2122+ tmp_vt_static [vi ] = vs
2123+ r = self ._get_variation_tags_from_default_variations (
2124+ extra_meta_source , variations , variation_groups ,
2125+ tmp_vt_static , excluded_variation_tags )
2126+ if r ['return' ] > 0 :
2127+ return r
2128+ for t in r ['variations_to_add' ]:
2129+ if t not in variation_tags :
2130+ variation_tags .append (t )
2131+
2132+ # Now process per-variation base variations and default_variations
2133+ # (lowest priority — only fills groups not already covered by
2134+ # script-level or version-level defaults above).
20942135 r = self ._update_variation_tags_from_variations (
20952136 variation_tags , variation_groups , excluded_variation_tags , variations )
20962137 if r ['return' ] > 0 :
20972138 return r
20982139
2099- # process group defaults
2140+ # Process group defaults (the 'default' key inside each group)
21002141 r = self ._process_variation_tags_in_groups (
21012142 variation_tags , variation_groups , excluded_variation_tags , variations )
21022143 if r ['return' ] > 0 :
21032144 return r
21042145 if variation_tags != r ['variation_tags' ]:
21052146 variation_tags = r ['variation_tags' ]
2106- # we need to again process variation tags if any new default
2107- # variation is added
2147+ # re-expand if any new group default was added
21082148 r = self ._update_variation_tags_from_variations (
21092149 variation_tags , variation_groups , excluded_variation_tags , variations )
21102150 if r ['return' ] > 0 :
@@ -5605,6 +5645,19 @@ def _apply_conditional_meta_updates(update_meta_if_env, default_env, env, const,
56055645 'append_lists' : True ,
56065646 'append_unique' : True })
56075647
5648+ # Accumulate default_variations from conditional meta updates.
5649+ # These will be picked up in _update_state_from_variations with
5650+ # the highest priority (above script-level default_variations).
5651+ c_default_variations = c_meta .get ('default_variations' , {})
5652+ if c_default_variations :
5653+ if 'conditional_default_variations' not in run_state :
5654+ run_state ['conditional_default_variations' ] = {}
5655+ # Later entries don't overwrite earlier ones (first match wins per
5656+ # group)
5657+ for group , variation in c_default_variations .items ():
5658+ run_state ['conditional_default_variations' ].setdefault (
5659+ group , variation )
5660+
56085661 return {'return' : 0 }
56095662
56105663
0 commit comments