diff options
-rwxr-xr-x | bitbake/bin/bitbake-worker | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/cache.py | 71 | ||||
-rw-r--r-- | bitbake/lib/bb/command.py | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/cooker.py | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/cookerdata.py | 51 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 3 |
6 files changed, 60 insertions, 74 deletions
diff --git a/bitbake/bin/bitbake-worker b/bitbake/bin/bitbake-worker index 7be39370b3..d54044f361 100755 --- a/bitbake/bin/bitbake-worker +++ b/bitbake/bin/bitbake-worker | |||
@@ -238,7 +238,6 @@ def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, taskha | |||
238 | os.umask(umask) | 238 | os.umask(umask) |
239 | 239 | ||
240 | try: | 240 | try: |
241 | bb_cache = bb.cache.NoCache(databuilder) | ||
242 | (realfn, virtual, mc) = bb.cache.virtualfn2realfn(fn) | 241 | (realfn, virtual, mc) = bb.cache.virtualfn2realfn(fn) |
243 | the_data = databuilder.mcdata[mc] | 242 | the_data = databuilder.mcdata[mc] |
244 | the_data.setVar("BB_WORKERCONTEXT", "1") | 243 | the_data.setVar("BB_WORKERCONTEXT", "1") |
@@ -257,7 +256,7 @@ def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, taskha | |||
257 | bb.parse.siggen.set_taskhashes(workerdata["newhashes"]) | 256 | bb.parse.siggen.set_taskhashes(workerdata["newhashes"]) |
258 | ret = 0 | 257 | ret = 0 |
259 | 258 | ||
260 | the_data = bb_cache.loadDataFull(fn, appends) | 259 | the_data = databuilder.parseRecipe(fn, appends) |
261 | the_data.setVar('BB_TASKHASH', taskhash) | 260 | the_data.setVar('BB_TASKHASH', taskhash) |
262 | the_data.setVar('BB_UNIHASH', unihash) | 261 | the_data.setVar('BB_UNIHASH', unihash) |
263 | 262 | ||
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 988c596c39..4d715e911d 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py | |||
@@ -280,75 +280,14 @@ def variant2virtual(realfn, variant): | |||
280 | return "mc:" + elems[1] + ":" + realfn | 280 | return "mc:" + elems[1] + ":" + realfn |
281 | return "virtual:" + variant + ":" + realfn | 281 | return "virtual:" + variant + ":" + realfn |
282 | 282 | ||
283 | def parse_recipe(bb_data, bbfile, appends, mc=''): | ||
284 | """ | ||
285 | Parse a recipe | ||
286 | """ | ||
287 | |||
288 | bb_data.setVar("__BBMULTICONFIG", mc) | ||
289 | |||
290 | bbfile_loc = os.path.abspath(os.path.dirname(bbfile)) | ||
291 | bb.parse.cached_mtime_noerror(bbfile_loc) | ||
292 | |||
293 | if appends: | ||
294 | bb_data.setVar('__BBAPPEND', " ".join(appends)) | ||
295 | bb_data = bb.parse.handle(bbfile, bb_data) | ||
296 | return bb_data | ||
297 | |||
298 | |||
299 | class NoCache(object): | ||
300 | |||
301 | def __init__(self, databuilder): | ||
302 | self.databuilder = databuilder | ||
303 | self.data = databuilder.data | ||
304 | |||
305 | def loadDataFull(self, virtualfn, appends): | ||
306 | """ | ||
307 | Return a complete set of data for fn. | ||
308 | To do this, we need to parse the file. | ||
309 | """ | ||
310 | logger.debug("Parsing %s (full)" % virtualfn) | ||
311 | (fn, virtual, mc) = virtualfn2realfn(virtualfn) | ||
312 | bb_data = self.load_bbfile(virtualfn, appends, virtonly=True) | ||
313 | return bb_data[virtual] | ||
314 | |||
315 | def load_bbfile(self, bbfile, appends, virtonly = False, mc=None): | ||
316 | """ | ||
317 | Load and parse one .bb build file | ||
318 | Return the data and whether parsing resulted in the file being skipped | ||
319 | """ | ||
320 | |||
321 | if virtonly: | ||
322 | (bbfile, virtual, mc) = virtualfn2realfn(bbfile) | ||
323 | bb_data = self.databuilder.mcdata[mc].createCopy() | ||
324 | bb_data.setVar("__ONLYFINALISE", virtual or "default") | ||
325 | datastores = parse_recipe(bb_data, bbfile, appends, mc) | ||
326 | return datastores | ||
327 | |||
328 | if mc is not None: | ||
329 | bb_data = self.databuilder.mcdata[mc].createCopy() | ||
330 | return parse_recipe(bb_data, bbfile, appends, mc) | ||
331 | 283 | ||
332 | bb_data = self.data.createCopy() | 284 | class Cache(object): |
333 | datastores = parse_recipe(bb_data, bbfile, appends) | ||
334 | |||
335 | for mc in self.databuilder.mcdata: | ||
336 | if not mc: | ||
337 | continue | ||
338 | bb_data = self.databuilder.mcdata[mc].createCopy() | ||
339 | newstores = parse_recipe(bb_data, bbfile, appends, mc) | ||
340 | for ns in newstores: | ||
341 | datastores["mc:%s:%s" % (mc, ns)] = newstores[ns] | ||
342 | |||
343 | return datastores | ||
344 | |||
345 | class Cache(NoCache): | ||
346 | """ | 285 | """ |
347 | BitBake Cache implementation | 286 | BitBake Cache implementation |
348 | """ | 287 | """ |
349 | def __init__(self, databuilder, mc, data_hash, caches_array): | 288 | def __init__(self, databuilder, mc, data_hash, caches_array): |
350 | super().__init__(databuilder) | 289 | self.databuilder = databuilder |
351 | data = databuilder.data | 290 | self.data = databuilder.data |
352 | 291 | ||
353 | # Pass caches_array information into Cache Constructor | 292 | # Pass caches_array information into Cache Constructor |
354 | # It will be used later for deciding whether we | 293 | # It will be used later for deciding whether we |
@@ -356,7 +295,7 @@ class Cache(NoCache): | |||
356 | self.mc = mc | 295 | self.mc = mc |
357 | self.logger = PrefixLoggerAdapter("Cache: %s: " % (mc if mc else "default"), logger) | 296 | self.logger = PrefixLoggerAdapter("Cache: %s: " % (mc if mc else "default"), logger) |
358 | self.caches_array = caches_array | 297 | self.caches_array = caches_array |
359 | self.cachedir = data.getVar("CACHE") | 298 | self.cachedir = self.data.getVar("CACHE") |
360 | self.clean = set() | 299 | self.clean = set() |
361 | self.checked = set() | 300 | self.checked = set() |
362 | self.depends_cache = {} | 301 | self.depends_cache = {} |
@@ -486,7 +425,7 @@ class Cache(NoCache): | |||
486 | """Parse the specified filename, returning the recipe information""" | 425 | """Parse the specified filename, returning the recipe information""" |
487 | self.logger.debug("Parsing %s", filename) | 426 | self.logger.debug("Parsing %s", filename) |
488 | infos = [] | 427 | infos = [] |
489 | datastores = self.load_bbfile(filename, appends, mc=self.mc) | 428 | datastores = self.databuilder.parseRecipeVariants(filename, appends, mc=self.mc) |
490 | depends = [] | 429 | depends = [] |
491 | variants = [] | 430 | variants = [] |
492 | # Process the "real" fn last so we can store variants list | 431 | # Process the "real" fn last so we can store variants list |
diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py index ec86885220..fa9fd054c2 100644 --- a/bitbake/lib/bb/command.py +++ b/bitbake/lib/bb/command.py | |||
@@ -567,8 +567,7 @@ class CommandsSync: | |||
567 | envdata = bb.cache.parse_recipe(config_data, fn, appendfiles, mc)[''] | 567 | envdata = bb.cache.parse_recipe(config_data, fn, appendfiles, mc)[''] |
568 | else: | 568 | else: |
569 | # Use the standard path | 569 | # Use the standard path |
570 | parser = bb.cache.NoCache(command.cooker.databuilder) | 570 | envdata = command.cooker.databuilder.parseRecipe(fn, appendfiles) |
571 | envdata = parser.loadDataFull(fn, appendfiles) | ||
572 | idx = command.remotedatastores.store(envdata) | 571 | idx = command.remotedatastores.store(envdata) |
573 | return DataStoreConnectionHandle(idx) | 572 | return DataStoreConnectionHandle(idx) |
574 | parseRecipeFile.readonly = True | 573 | parseRecipeFile.readonly = True |
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 1da2f03197..1af29f217d 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -617,8 +617,7 @@ class BBCooker: | |||
617 | 617 | ||
618 | if fn: | 618 | if fn: |
619 | try: | 619 | try: |
620 | bb_caches = bb.cache.MulticonfigCache(self.databuilder, self.data_hash, self.caches_array) | 620 | envdata = self.databuilder.parseRecipe(fn, self.collections[mc].get_file_appends(fn)) |
621 | envdata = bb_caches[mc].loadDataFull(fn, self.collections[mc].get_file_appends(fn)) | ||
622 | except Exception as e: | 621 | except Exception as e: |
623 | parselog.exception("Unable to read %s", fn) | 622 | parselog.exception("Unable to read %s", fn) |
624 | raise | 623 | raise |
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py index 8a354fed7c..c322ab2ffb 100644 --- a/bitbake/lib/bb/cookerdata.py +++ b/bitbake/lib/bb/cookerdata.py | |||
@@ -466,3 +466,54 @@ class CookerDataBuilder(object): | |||
466 | 466 | ||
467 | return data | 467 | return data |
468 | 468 | ||
469 | @staticmethod | ||
470 | def _parse_recipe(bb_data, bbfile, appends, mc=''): | ||
471 | bb_data.setVar("__BBMULTICONFIG", mc) | ||
472 | |||
473 | bbfile_loc = os.path.abspath(os.path.dirname(bbfile)) | ||
474 | bb.parse.cached_mtime_noerror(bbfile_loc) | ||
475 | |||
476 | if appends: | ||
477 | bb_data.setVar('__BBAPPEND', " ".join(appends)) | ||
478 | bb_data = bb.parse.handle(bbfile, bb_data) | ||
479 | return bb_data | ||
480 | |||
481 | def parseRecipeVariants(self, bbfile, appends, virtonly=False, mc=None): | ||
482 | """ | ||
483 | Load and parse one .bb build file | ||
484 | Return the data and whether parsing resulted in the file being skipped | ||
485 | """ | ||
486 | |||
487 | if virtonly: | ||
488 | (bbfile, virtual, mc) = bb.cache.virtualfn2realfn(bbfile) | ||
489 | bb_data = self.mcdata[mc].createCopy() | ||
490 | bb_data.setVar("__ONLYFINALISE", virtual or "default") | ||
491 | datastores = self._parse_recipe(bb_data, bbfile, appends, mc) | ||
492 | return datastores | ||
493 | |||
494 | if mc is not None: | ||
495 | bb_data = self.mcdata[mc].createCopy() | ||
496 | return self._parse_recipe(bb_data, bbfile, appends, mc) | ||
497 | |||
498 | bb_data = self.data.createCopy() | ||
499 | datastores = self._parse_recipe(bb_data, bbfile, appends) | ||
500 | |||
501 | for mc in self.mcdata: | ||
502 | if not mc: | ||
503 | continue | ||
504 | bb_data = self.mcdata[mc].createCopy() | ||
505 | newstores = self._parse_recipe(bb_data, bbfile, appends, mc) | ||
506 | for ns in newstores: | ||
507 | datastores["mc:%s:%s" % (mc, ns)] = newstores[ns] | ||
508 | |||
509 | return datastores | ||
510 | |||
511 | def parseRecipe(self, virtualfn, appends): | ||
512 | """ | ||
513 | Return a complete set of data for fn. | ||
514 | To do this, we need to parse the file. | ||
515 | """ | ||
516 | logger.debug("Parsing %s (full)" % virtualfn) | ||
517 | (fn, virtual, mc) = bb.cache.virtualfn2realfn(virtualfn) | ||
518 | bb_data = self.parseRecipeVariants(virtualfn, appends, virtonly=True) | ||
519 | return bb_data[virtual] | ||
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 338d1fe36f..437f4a185c 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1610,9 +1610,8 @@ class RunQueue: | |||
1610 | self.rqexe.finish() | 1610 | self.rqexe.finish() |
1611 | 1611 | ||
1612 | def rq_dump_sigfn(self, fn, options): | 1612 | def rq_dump_sigfn(self, fn, options): |
1613 | bb_cache = bb.cache.NoCache(self.cooker.databuilder) | ||
1614 | mc = bb.runqueue.mc_from_tid(fn) | 1613 | mc = bb.runqueue.mc_from_tid(fn) |
1615 | the_data = bb_cache.loadDataFull(fn, self.cooker.collections[mc].get_file_appends(fn)) | 1614 | the_data = self.cooker.databuilder.parseRecipe(fn, self.cooker.collections[mc].get_file_appends(fn)) |
1616 | siggen = bb.parse.siggen | 1615 | siggen = bb.parse.siggen |
1617 | dataCaches = self.rqdata.dataCaches | 1616 | dataCaches = self.rqdata.dataCaches |
1618 | siggen.dump_sigfn(fn, dataCaches, options) | 1617 | siggen.dump_sigfn(fn, dataCaches, options) |