def _get_graph_builder(self, loader, update, remote_proxy): local_search = None if update else self._search_manager resolver = RequireResolver(self._user_io.out, local_search, remote_proxy) graph_builder = DepsGraphBuilder(remote_proxy, self._user_io.out, loader, resolver) return graph_builder
def _install(self, references): self._output.info("Installing build requires: [%s]" % ", ".join(str(r) for r in references)) conanfile = self._loader.load_virtual( references, None, scope_options=False) # No need current path # FIXME: Forced update=True, build_mode, Where to define it? update = False local_search = None if update else self._search_manager resolver = RequireResolver(self._output, local_search, self._remote_proxy) graph_builder = DepsGraphBuilder(self._remote_proxy, self._output, self._loader, resolver) deps_graph = graph_builder.load(conanfile) registry = RemoteRegistry(self._client_cache.registry, self._output) Printer(self._output).print_graph(deps_graph, registry) # Make sure we recursively do not propagate the "*" pattern build_requires = copy.copy(self) build_requires._build_requires = self._build_requires.copy() build_requires._build_requires.pop("*", None) build_requires._build_requires.pop("&!", None) installer = ConanInstaller(self._client_cache, self._output, self._remote_proxy, build_requires) installer.install(deps_graph, self._build_modes, self._current_path) self._output.info("Installed build requires: [%s]" % ", ".join(str(r) for r in references)) return deps_graph
def _get_graph(self, reference, current_path, remote, options, settings, filename, update, check_updates, manifest_manager, scopes, package_settings, env, package_env): loader = self._loader(current_path, settings, package_settings, options, scopes, env, package_env) # Not check for updates for info command, it'll be checked when dep graph is built remote_proxy = ConanProxy(self._client_cache, self._user_io, self._remote_manager, remote, update=update, check_updates=check_updates, manifest_manager=manifest_manager) if isinstance(reference, ConanFileReference): project_reference = None conanfile = loader.load_virtual(reference, current_path) is_txt = True else: conanfile_path = reference project_reference = "PROJECT" output = ScopedOutput(project_reference, self._user_io.out) try: if filename and filename.endswith(".txt"): raise NotFoundException("") conan_file_path = os.path.join(conanfile_path, filename or CONANFILE) conanfile = loader.load_conan(conan_file_path, output, consumer=True) is_txt = False if conanfile.name is not None and conanfile.version is not None: project_reference = "%s/%s@" % (conanfile.name, conanfile.version) project_reference += "PROJECT" except NotFoundException: # Load requirements.txt conan_path = os.path.join(conanfile_path, filename or CONANFILE_TXT) conanfile = loader.load_conan_txt(conan_path, output) is_txt = True # build deps graph and install it local_search = None if update else self._search_manager resolver = RequireResolver(self._user_io.out, local_search, remote_proxy) builder = DepsGraphBuilder(remote_proxy, self._user_io.out, loader, resolver) deps_graph = builder.load(None, conanfile) # These lines are so the conaninfo stores the correct complete info if is_txt: conanfile.info.settings = loader._settings.values conanfile.info.full_settings = loader._settings.values conanfile.info.scope = self._current_scopes conanfile.cpp_info = CppInfo(current_path) conanfile.env_info = EnvInfo(current_path) registry = RemoteRegistry(self._client_cache.registry, self._user_io.out) return (builder, deps_graph, project_reference, registry, conanfile, remote_proxy, loader)
def setUp(self): self.output = TestBufferConanOutput() self.loader = ConanFileLoader(None, Settings.loads(""), Profile()) self.retriever = Retriever(self.loader, self.output) self.remote_search = MockSearchRemote() self.resolver = RequireResolver(self.output, self.retriever, self.remote_search) self.builder = DepsGraphBuilder(self.retriever, self.output, self.loader, self.resolver) for v in ["0.1", "0.2", "0.3", "1.1", "1.1.2", "1.2.1", "2.1", "2.2.1"]: say_content = """ from conans import ConanFile class SayConan(ConanFile): name = "Say" version = "%s" """ % v say_ref = ConanFileReference.loads("Say/%s@memsharded/testing" % v) self.retriever.conan(say_ref, say_content)