Skip to content

Commit 5a5dea8

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

File tree

2 files changed

+24
-23
lines changed

2 files changed

+24
-23
lines changed

pym/bob/input.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2220,16 +2220,6 @@ def coDet(r):
22202220
if self.__jobServer is None:
22212221
self.__jobServer = False
22222222

2223-
# check provided dependencies
2224-
availDeps = [ d.recipe for d in self.__deps ]
2225-
providedDeps = set()
2226-
for pattern in self.__provideDeps:
2227-
l = set(d for d in availDeps if fnmatch.fnmatchcase(d, pattern))
2228-
if not l:
2229-
raise ParseError("Unknown dependency '{}' in provideDeps".format(pattern))
2230-
providedDeps |= l
2231-
self.__provideDeps = providedDeps
2232-
22332223
# Evaluate root property
22342224
if isinstance(self.__root, str) or isinstance(self.__root, IfExpression):
22352225
self.__root = rootEnv.evaluate(self.__root, "root")
@@ -2357,6 +2347,7 @@ def prepare(self, inputEnv, sandboxEnabled, inputStates, inputSandbox=None,
23572347
depDiffTools = diffTools.copy()
23582348
thisDeps = {}
23592349
depVars = set()
2350+
resolvedDeps = []
23602351

23612352
for d in self.__deps:
23622353
dep = copy.deepcopy(d)
@@ -2366,6 +2357,7 @@ def prepare(self, inputEnv, sandboxEnabled, inputStates, inputSandbox=None,
23662357
depsEnv = env.derive()
23672358
depsEnv.touchReset()
23682359
dep.recipe = depsEnv.substitute(dep.recipe, "dependency::"+dep.recipe)
2360+
resolvedDeps.append(dep.recipe)
23692361
depVars = set([e for e in depsEnv.touchedKeys()])
23702362

23712363
if dep.condition and not all(env.evaluate(cond, "dependency "+dep.recipe)
@@ -2463,13 +2455,18 @@ def prepare(self, inputEnv, sandboxEnabled, inputStates, inputSandbox=None,
24632455
for d in depCoreStep.providedDeps])
24642456
maybeProvideDeps[dep.recipe] = l
24652457

2466-
__provideDeps = [ env.substitute(p, "providedDep::"+p)
2467-
for p in self.__provideDeps]
2458+
# check provided dependencies
2459+
providedDeps = set()
2460+
for pattern in self.__provideDeps:
2461+
pattern = env.substitute(pattern, "providedDep::"+pattern)
2462+
l = set(d for d in resolvedDeps if fnmatch.fnmatchcase(d, pattern))
2463+
if not l:
2464+
raise ParseError("Unknown dependency '{}' in provideDeps".format(pattern))
2465+
providedDeps |= l
24682466

2469-
for recipe, refs in maybeProvideDeps.items():
2470-
if recipe in __provideDeps:
2471-
provideDeps.append(refs[0])
2472-
provideDeps.extend(refs[1])
2467+
for recipe in providedDeps:
2468+
provideDeps.append(maybeProvideDeps[recipe][0])
2469+
provideDeps.extend(maybeProvideDeps[recipe][1])
24732470

24742471
# Filter indirect packages and add to result list if necessary. Most
24752472
# likely there are many duplicates that are dropped.

test/unit/test_input_recipeset.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,18 +272,19 @@ def testVariableDeps(self):
272272
""")
273273

274274
self.writeRecipe("a", """\
275-
depends: [ "$A" ]
275+
depends: [ "$A-foo" ]
276276
buildScript: "true"
277277
packageScript: "true"
278+
provideDeps: [ "$A-f*" ]
278279
provideVars:
279280
D: "e"
280281
""")
281282

282-
self.writeRecipe("b", """\
283+
self.writeRecipe("b-foo", """\
283284
buildScript: "true"
284285
packageScript: "true"
285286
""")
286-
self.writeRecipe("c", """\
287+
self.writeRecipe("c-foo", """\
287288
buildScript: "true"
288289
packageScript: "true"
289290
""")
@@ -304,12 +305,15 @@ def testVariableDeps(self):
304305
recipes.parse()
305306
packages = recipes.generatePackages(lambda x,y: "unused")
306307

307-
p = packages.walkPackagePath("root/a/b")
308-
self.assertEqual(p.getName(), "b")
309-
p = packages.walkPackagePath("root2/a/c")
310-
self.assertEqual(p.getName(), "c")
308+
p = packages.walkPackagePath("root/a/b-foo")
309+
self.assertEqual(p.getName(), "b-foo")
310+
p = packages.walkPackagePath("root2/a/c-foo")
311+
self.assertEqual(p.getName(), "c-foo")
311312
p = packages.walkPackagePath("root2/d/e")
312313
self.assertEqual(p.getName(), "e")
314+
#access via providedDeps
315+
p = packages.walkPackagePath("root/b-foo")
316+
self.assertEqual(p.getName(), "b-foo")
313317

314318
def testDuplicateRemoval(self):
315319
"""Test that provided dependencies do not replace real dependencies"""

0 commit comments

Comments
 (0)