Exemple #1
0
 def find_any(self, queries, types=None):
     nodes = set()
     for query in utils.listify(queries):
         result = self._resolve_partial(query, None)
         if result is None:
             raise le.LbuildParserNodeNotFoundException(self, query, types)
         nodes |= set(result)
     if types:
         types = utils.listify(types)
         nodes = [n for n in nodes if any(n.type == t for t in types)]
     return list(nodes)
Exemple #2
0
 def merge_module_options(self):
     # only deal with repo options that contain one `:`
     resolver = self.option_resolver
     for name, value in {n: v for n, v in self.config.options.items()
                         if n.count(":") > 1}.items():
         try:
             resolver[name].value = value
         except le.LbuildOptionException as error:
             raise le.LbuildDumpConfigException(
                 "Failed to validate module options!\n{}".format(error), self)
         except le.LbuildResolverNoMatchException as error:
             raise le.LbuildParserNodeNotFoundException(self, name, self.Type.OPTION)
Exemple #3
0
 def merge_module_options(self):
     # only deal with repo options that contain one `:`
     resolver = self.option_resolver
     for name, (value, filename) in filter(lambda i: i[0].count(":") > 1,
                                           self.config.options.items()):
         try:
             option = resolver[name]
             option._filename = filename
             option.value = value
         except le.LbuildOptionException as error:
             raise le.LbuildParserOptionInvalidException(
                 self, error, filename)
         except le.LbuildResolverNoMatchException as error:
             raise le.LbuildParserNodeNotFoundException(
                 self, name, self.Type.OPTION, filename)
Exemple #4
0
    def build_modules(self, build_modules, buildlog=None, simulate=False):
        undefined = self._undefined_options(self.all_options())
        if undefined:
            raise le.LbuildOptionRequiredInputsException(undefined)
        if not build_modules:
            raise le.LbuildConfigNoModulesException(self)
        if buildlog is None and simulate:
            buildlog = BuildLog()  # Create a buildlog for simulation

        # Update subtree build order
        self._update_order()
        groups = collections.defaultdict(lambda: collections.defaultdict(list))
        # Build environments for all modules and repos
        for node in (build_modules | {m.repository for m in build_modules}):
            env = lbuild.environment.Environment(node, buildlog)
            groups[node._build_order][node.depth].append(Runner(node, env))

        def walk_modules():
            # Enforce that the submodules are always build before their parent modules
            for group in (groups[index] for index in sorted(groups)):
                for modules in (group[index]
                                for index in sorted(group, reverse=True)):
                    random.shuffle(modules)
                    for module in modules:
                        yield module

        # Merge config collectors values
        resolver = self.collector_available_resolver
        for (name, value, filename) in self.config.collectors:
            try:
                collector = resolver[name]
                collector.add_values(value,
                                     collector.repository.fullname,
                                     filename=filename)
            except le.LbuildOptionException as error:
                raise le.LbuildParserOptionInvalidException(
                    self, error, filename)
            except le.LbuildResolverNoMatchException as error:
                raise le.LbuildParserNodeNotFoundException(
                    self, name, self.Type.COLLECTOR, filename)

        exceptions = []
        for runner in walk_modules():
            try:
                runner.validate()
            except le.LbuildException as error:
                exceptions.append(error)

        if exceptions:
            raise le.LbuildAggregateException(exceptions)

        # Cannot build without a buildlog
        if buildlog is None:
            return
        lbuild.environment.SIMULATE = simulate

        # Build modules
        for runner in walk_modules():
            runner.build()

        # Post-build modules
        for runner in walk_modules():
            runner.post_build(buildlog)