@@ -246,17 +246,21 @@ func (d cascadeConfigDecoder) decodePageMatcher(m any, v *PageMatcher) error {
246246}
247247
248248// DecodeCascadeConfigOptions
249- func (v * PageMatcher ) compileSitesMatrix (configuredDimensions * sitesmatrix.ConfiguredDimensions ) error {
250- if v .Sites .Matrix .IsZero () {
249+ func (v * PageMatcher ) compileSitesMatrix (defaults sitesmatrix. VectorStore , configuredDimensions * sitesmatrix.ConfiguredDimensions ) error {
250+ if v .Sites .Matrix .IsZero () && defaults == nil {
251251 // Nothing to do.
252252 v .SitesMatrixCompiled = nil
253253 return nil
254254 }
255255 intSetsCfg := sitesmatrix.IntSetsConfig {
256256 Globs : v .Sites .Matrix ,
257257 }
258- b := sitesmatrix .NewIntSetsBuilder (configuredDimensions ).WithConfig (intSetsCfg ).WithAllIfNotSet ()
259258
259+ b := sitesmatrix .NewIntSetsBuilder (configuredDimensions ).WithConfig (intSetsCfg )
260+ if defaults != nil && v .Sites .Matrix .IsZero () {
261+ b = b .WithDimensionsFromOtherIfNotSet (defaults )
262+ }
263+ b = b .WithAllIfNotSet ()
260264 v .SitesMatrixCompiled = b .Build ()
261265 return nil
262266}
@@ -281,6 +285,17 @@ func (p *PageMatcherParamsConfig) init() error {
281285 return nil
282286}
283287
288+ func (p * PageMatcherParamsConfig ) hasSitesMatrix () bool {
289+ if m , ok := p .Fields ["sites" ]; ok {
290+ mm := maps .ToStringMap (m )
291+ if sm , found := mm ["matrix" ]; found {
292+ mmm := maps .ToStringMap (sm )
293+ return len (mmm ) > 0
294+ }
295+ }
296+ return false
297+ }
298+
284299type PageMatcherParamsConfigs struct {
285300 c []* config.ConfigNamespace [[]PageMatcherParamsConfig , CascadeConfig ]
286301}
@@ -347,16 +362,23 @@ func (c *PageMatcherParamsConfigs) SourceHash() uint64 {
347362 return h .Sum64 ()
348363}
349364
350- func (c * PageMatcherParamsConfigs ) InitConfig (logger loggers.Logger , _ sitesmatrix.VectorStore , configuredDimensions * sitesmatrix.ConfiguredDimensions ) error {
365+ func (c * PageMatcherParamsConfigs ) InitConfig (logger loggers.Logger , defaultsIn sitesmatrix.VectorStore , configuredDimensions * sitesmatrix.ConfiguredDimensions ) error {
351366 if c == nil {
352367 return nil
353368 }
354369 for _ , cc := range c .c {
355370 for i := range cc .Config .Cascades {
356- checkCascadePattern (logger , cc .Config .Cascades [i ].Target )
357- if err := cc .Config .Cascades [i ].Target .compileSitesMatrix (configuredDimensions ); err != nil {
371+ ccc := cc .Config .Cascades [i ]
372+ checkCascadePattern (logger , ccc .Target )
373+ defaults := defaultsIn
374+ hasSitesMatrix := ccc .hasSitesMatrix ()
375+ if hasSitesMatrix {
376+ defaults = nil
377+ }
378+ if err := ccc .Target .compileSitesMatrix (defaults , configuredDimensions ); err != nil {
358379 return fmt .Errorf ("failed to compile cascade target %d: %w" , i , err )
359380 }
381+ cc .Config .Cascades [i ] = ccc
360382 }
361383 }
362384 return nil
0 commit comments