Skip to content

Commit 9516691

Browse files
committed
fixup! input: support for variable depends
1 parent a8231b5 commit 9516691

File tree

2 files changed

+36
-13
lines changed

2 files changed

+36
-13
lines changed

pym/bob/input.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

test/unit/test_input_recipeset.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,12 +258,13 @@ def testVariableDeps(self):
258258
depends: [a]
259259
environment:
260260
A : "b"
261+
D : "c"
261262
buildScript: "true"
262263
packageScript: "true"
263264
""")
264265
self.writeRecipe("root2", """\
265266
root: True
266-
depends: [a]
267+
depends: [a, d]
267268
environment:
268269
A : "c"
269270
buildScript: "true"
@@ -274,6 +275,8 @@ def testVariableDeps(self):
274275
depends: [ "$A" ]
275276
buildScript: "true"
276277
packageScript: "true"
278+
provideVars:
279+
D: "e"
277280
""")
278281

279282
self.writeRecipe("b", """\
@@ -284,6 +287,18 @@ def testVariableDeps(self):
284287
buildScript: "true"
285288
packageScript: "true"
286289
""")
290+
self.writeRecipe("d", """\
291+
depends:
292+
- name: a
293+
use: [environment, deps]
294+
- "$D"
295+
buildScript: "true"
296+
packageScript: "true"
297+
""")
298+
self.writeRecipe("e", """\
299+
buildScript: "true"
300+
packageScript: "true"
301+
""")
287302

288303
recipes = RecipeSet()
289304
recipes.parse()
@@ -293,7 +308,8 @@ def testVariableDeps(self):
293308
self.assertEqual(p.getName(), "b")
294309
p = packages.walkPackagePath("root2/a/c")
295310
self.assertEqual(p.getName(), "c")
296-
311+
p = packages.walkPackagePath("root2/d/e")
312+
self.assertEqual(p.getName(), "e")
297313

298314
def testDuplicateRemoval(self):
299315
"""Test that provided dependencies do not replace real dependencies"""

0 commit comments

Comments
 (0)