def test_complete_scopes(self): _global = ScopeInfo.for_global_scope() self.assertEquals({_global, intermediate('foo'), intermediate('foo.bar'), task('foo.bar.baz')}, Options.complete_scopes({task('foo.bar.baz')})) self.assertEquals({_global, intermediate('foo'), intermediate('foo.bar'), task('foo.bar.baz')}, Options.complete_scopes({ScopeInfo.for_global_scope(), task('foo.bar.baz')})) self.assertEquals({_global, goal('foo'), intermediate('foo.bar'), task('foo.bar.baz')}, Options.complete_scopes({goal('foo'), task('foo.bar.baz')})) self.assertEquals({_global, intermediate('foo'), intermediate('foo.bar'), task('foo.bar.baz'), intermediate('qux'), task('qux.quux')}, Options.complete_scopes({task('foo.bar.baz'), task('qux.quux')}))
def bootstrap_options_from_config(config): bootstrap_options = Options( env=self._env, config=config, known_scope_infos=[ScopeInfo.for_global_scope()], args=bargs) def register_global(*args, **kwargs): bootstrap_options.register(GLOBAL_SCOPE, *args, **kwargs) GlobalOptionsRegistrar.register_bootstrap_options( register_global) return bootstrap_options
def test_complete_scopes(self): _global = ScopeInfo.for_global_scope() self.assertEquals( { _global, intermediate('foo'), intermediate('foo.bar'), task('foo.bar.baz') }, Options.complete_scopes({task('foo.bar.baz')})) self.assertEquals( { _global, intermediate('foo'), intermediate('foo.bar'), task('foo.bar.baz') }, Options.complete_scopes( {ScopeInfo.for_global_scope(), task('foo.bar.baz')})) self.assertEquals( { _global, intermediate('foo'), intermediate('foo.bar'), task('foo.bar.baz') }, Options.complete_scopes({intermediate('foo'), task('foo.bar.baz')})) self.assertEquals( { _global, intermediate('foo'), intermediate('foo.bar'), task('foo.bar.baz'), intermediate('qux'), task('qux.quux') }, Options.complete_scopes({task('foo.bar.baz'), task('qux.quux')}))
def complete_scopes(cls, scope_infos): """Expand a set of scopes to include all enclosing scopes. E.g., if the set contains `foo.bar.baz`, ensure that it also contains `foo.bar` and `foo`. """ ret = {ScopeInfo.for_global_scope()} for scope_info in scope_infos: ret.add(scope_info) original_scopes = {si.scope for si in scope_infos} for scope_info in scope_infos: scope = scope_info.scope while scope != '': if scope not in original_scopes: ret.add(ScopeInfo(scope, ScopeInfo.INTERMEDIATE)) scope = scope.rpartition('.')[0] return ret
def complete_scopes(cls, scope_infos): """Expand a set of scopes to include all enclosing scopes. E.g., if the set contains `foo.bar.baz`, ensure that it also contains `foo.bar` and `foo`. """ ret = {ScopeInfo.for_global_scope()} for scope_info in scope_infos: ret.add(scope_info) original_scopes = {si.scope for si in scope_infos} for scope_info in scope_infos: scope = scope_info.scope while scope != '': if scope not in original_scopes: ret.add(ScopeInfo(scope, ScopeInfo.INTERMEDIATE)) scope = scope.rpartition('.')[0] return ret
def setup(self): options_bootstrapper = OptionsBootstrapper() bootstrap_options = options_bootstrapper.get_bootstrap_options() # Get logging setup prior to loading backends so that they can log as needed. self._setup_logging(bootstrap_options.for_global_scope()) # Add any extra paths to python path (eg for loading extra source backends) for path in bootstrap_options.for_global_scope().pythonpath: sys.path.append(path) pkg_resources.fixup_namespace_packages(path) # Load plugins and backends. plugins = bootstrap_options.for_global_scope().plugins backend_packages = bootstrap_options.for_global_scope().backend_packages build_configuration = load_plugins_and_backends(plugins, backend_packages) # Now that plugins and backends are loaded, we can gather the known scopes. self.targets = [] known_scope_infos = [ScopeInfo.for_global_scope()] # Add scopes for all needed subsystems. subsystems = (set(self.subsystems) | Goal.subsystems() | build_configuration.subsystems()) for subsystem in subsystems: known_scope_infos.append(ScopeInfo(subsystem.options_scope, ScopeInfo.GLOBAL_SUBSYSTEM)) # Add scopes for all tasks in all goals. for goal in Goal.all(): known_scope_infos.extend(filter(None, goal.known_scope_infos())) # Now that we have the known scopes we can get the full options. self.options = options_bootstrapper.get_full_options(known_scope_infos) self.register_options(subsystems) # Make the options values available to all subsystems. Subsystem._options = self.options # Now that we have options we can instantiate subsystems. self.run_tracker = RunTracker.global_instance() self.reporting = Reporting.global_instance() report = self.reporting.initial_reporting(self.run_tracker) self.run_tracker.start(report) url = self.run_tracker.run_info.get_info('report_url') if url: self.run_tracker.log(Report.INFO, 'See a report at: {}'.format(url)) else: self.run_tracker.log(Report.INFO, '(To run a reporting server: ./pants server)') self.build_file_parser = BuildFileParser(build_configuration=build_configuration, root_dir=self.root_dir, run_tracker=self.run_tracker) rev = self.options.for_global_scope().build_file_rev if rev: ScmBuildFile.set_rev(rev) ScmBuildFile.set_scm(get_scm()) build_file_type = ScmBuildFile else: build_file_type = FilesystemBuildFile self.address_mapper = BuildFileAddressMapper(self.build_file_parser, build_file_type) self.build_graph = BuildGraph(run_tracker=self.run_tracker, address_mapper=self.address_mapper) # TODO(John Sirois): Kill when source root registration is lifted out of BUILD files. with self.run_tracker.new_workunit(name='bootstrap', labels=[WorkUnit.SETUP]): source_root_bootstrapper = SourceRootBootstrapper.global_instance() source_root_bootstrapper.bootstrap(self.address_mapper, self.build_file_parser) self._expand_goals_and_specs() # Now that we've parsed the bootstrap BUILD files, and know about the SCM system. self.run_tracker.run_info.add_scm_info()