@@ -2346,6 +2346,7 @@ def prepare(self, inputEnv, sandboxEnabled, inputStates, inputSandbox=None,
23462346 directPackages = []
23472347 indirectPackages = []
23482348 provideDeps = UniquePackageList (stack , self .__raiseIncompatibleProvided )
2349+ maybeProvideDeps = {}
23492350 checkoutDeps = []
23502351 results = []
23512352 depEnv = env .derive ()
@@ -2355,17 +2356,14 @@ def prepare(self, inputEnv, sandboxEnabled, inputStates, inputSandbox=None,
23552356 depDiffSandbox = diffSandbox
23562357 depDiffTools = diffTools .copy ()
23572358 thisDeps = {}
2358- depsEnv = env .derive ()
23592359 depVars = set ()
23602360
2361- __provideDeps = [ env .substitute (p , "providedDep::" + p )
2362- for p in self .__provideDeps ]
2363-
23642361 for d in self .__deps :
23652362 dep = copy .deepcopy (d )
23662363 env .setFunArgs ({ "recipe" : self , "sandbox" : bool (sandbox ) and sandboxEnabled ,
23672364 "__tools" : tools })
23682365
2366+ depsEnv = env .derive ()
23692367 depsEnv .touchReset ()
23702368 dep .recipe = depsEnv .substitute (dep .recipe , "dependency::" + dep .recipe )
23712369 depVars = set ([e for e in depsEnv .touchedKeys ()])
@@ -2459,10 +2457,19 @@ def prepare(self, inputEnv, sandboxEnabled, inputStates, inputSandbox=None,
24592457 if sandboxEnabled :
24602458 env .update (sandbox .environment )
24612459 if dep .provideGlobal : depEnv .update (sandbox .environment )
2462- if dep .recipe in __provideDeps :
2463- provideDeps .append (depRef )
2464- provideDeps .extend (CoreRef (d , [p .getName ()], origDepDiffTools , origDepDiffSandbox )
2465- for d in depCoreStep .providedDeps )
2460+
2461+ l = [depRef ]
2462+ l .append ([CoreRef (d , [p .getName ()], origDepDiffTools , origDepDiffSandbox )
2463+ for d in depCoreStep .providedDeps ])
2464+ maybeProvideDeps [dep .recipe ] = l
2465+
2466+ __provideDeps = [ env .substitute (p , "providedDep::" + p )
2467+ for p in self .__provideDeps ]
2468+
2469+ for recipe , refs in maybeProvideDeps .items ():
2470+ if recipe in __provideDeps :
2471+ provideDeps .append (refs [0 ])
2472+ provideDeps .extend (refs [1 ])
24662473
24672474 # Filter indirect packages and add to result list if necessary. Most
24682475 # likely there are many duplicates that are dropped.
@@ -2554,8 +2561,8 @@ def prepare(self, inputEnv, sandboxEnabled, inputStates, inputSandbox=None,
25542561
25552562 # optional checkout step
25562563 if self .__checkout != (None , None , None ) or self .__checkoutSCMs or self .__checkoutAsserts :
2557- checkoutDigestEnv = env .prune (self .__checkoutVars )
2558- checkoutEnv = ( env .prune (self .__checkoutVars | self .__checkoutVarsWeak | depVars )
2564+ checkoutDigestEnv = env .prune (self .__checkoutVars | depVars )
2565+ checkoutEnv = ( env .prune (self .__checkoutVars | self .__checkoutVarsWeak )
25592566 if self .__checkoutVarsWeak else checkoutDigestEnv )
25602567 checkoutUpdateIf = [
25612568 ( (env .evaluate (cond , "checkoutUpdateIf" )
@@ -2581,7 +2588,7 @@ def prepare(self, inputEnv, sandboxEnabled, inputStates, inputSandbox=None,
25812588 # optional build step
25822589 if self .__build != (None , None , None ):
25832590 buildDigestEnv = env .prune (self .__buildVars | depVars )
2584- buildEnv = ( env .prune (self .__buildVars | self .__buildVarsWeak | depVars )
2591+ buildEnv = ( env .prune (self .__buildVars | self .__buildVarsWeak )
25852592 if self .__buildVarsWeak else buildDigestEnv )
25862593 buildCoreStep = p .createCoreBuildStep (self .__build , buildDigestEnv , buildEnv ,
25872594 [CoreRef (srcCoreStep )] + results )
0 commit comments