def test_parse(self): folder = temp_folder() path = os.path.join(folder, "conanws.yml") project = "root: Hellob/0.1@lasote/stable" save(path, project) with six.assertRaisesRegex(self, ConanException, "Root Hellob/0.1@lasote/stable is not defined as editable"): Workspace(path, None) project = dedent(""" editables: HelloB/0.1@lasote/stable: path: B random: something root: HelloB/0.1@lasote/stable """) save(path, project) with six.assertRaisesRegex(self, ConanException, "Workspace unrecognized fields: {'random': 'something'}"): Workspace(path, None) project = dedent(""" editables: HelloB/0.1@lasote/stable: path: B root: HelloB/0.1@lasote/stable random: something """) save(path, project) with six.assertRaisesRegex(self, ConanException, "Workspace unrecognized fields: {'random': 'something'}"): Workspace(path, None) project = dedent(""" editables: HelloB/0.1@lasote/stable: root: HelloB/0.1@lasote/stable """) save(path, project) with six.assertRaisesRegex(self, ConanException, "Workspace editable HelloB/0.1@lasote/stable " "does not define path"): Workspace(path, None) project = dedent(""" editables: HelloB/0.1@lasote/stable: layout: layout root: HelloB/0.1@lasote/stable """) save(path, project) with six.assertRaisesRegex(self, ConanException, "Workspace editable HelloB/0.1@lasote/stable " "does not define path"): Workspace(path, None)
def workspace_install(self, path, settings=None, options=None, env=None, remote_name=None, build=None, profile_name=None, update=False, cwd=None, install_folder=None): cwd = cwd or get_cwd() abs_path = os.path.normpath(os.path.join(cwd, path)) remotes = self.app.load_remotes(remote_name=remote_name, update=update) # remotes = self.app.cache.registry.load_remotes() # remotes.select(remote_name) # self.app.python_requires.enable_remotes(update=update, remotes=remotes) workspace = Workspace(abs_path, self.app.cache) graph_info = get_graph_info(profile_name, settings, options, env, cwd, None, self.app.cache, self.app.out) self.app.out.info("Configuration:") self.app.out.writeln(graph_info.profile_host.dumps()) self.app.cache.editable_packages.override(workspace.get_editable_dict()) recorder = ActionRecorder() deps_graph = self.app.graph_manager.load_graph(workspace.root, None, graph_info, build, False, update, remotes, recorder) print_graph(deps_graph, self.app.out) # Inject the generators before installing for node in deps_graph.nodes: if node.recipe == RECIPE_EDITABLE: generators = workspace[node.ref].generators if generators is not None: tmp = list(node.conanfile.generators) tmp.extend([g for g in generators if g not in tmp]) node.conanfile.generators = tmp installer = BinaryInstaller(self.app, recorder) installer.install(deps_graph, remotes, build, update, keep_build=False, graph_info=graph_info) install_folder = install_folder or cwd workspace.generate(install_folder, deps_graph, self.app.out) workspace.build(install_folder, deps_graph, self.app.out, self.app)
def install(self, path="", settings=None, options=None, env=None, remote_name=None, verify=None, manifests=None, manifests_interactive=None, build=None, profile_name=None, update=False, generators=None, no_imports=False, install_folder=None, cwd=None): try: recorder = ActionRecorder() cwd = cwd or os.getcwd() manifests = _parse_manifests_arguments(verify, manifests, manifests_interactive, cwd) manifest_folder, manifest_interactive, manifest_verify = manifests profile = profile_from_args(profile_name, settings, options, env, cwd, self._client_cache) wspath = _make_abs_path(path, cwd) if install_folder: if os.path.isabs(install_folder): wsinstall_folder = install_folder else: wsinstall_folder = os.path.join(cwd, install_folder) else: wsinstall_folder = None workspace = Workspace.get_workspace(wspath, wsinstall_folder) if workspace: self._user_io.out.success("Using conanws.yml file from %s" % workspace._base_folder) manager = self._init_manager(recorder) manager.install_workspace(profile, workspace, remote_name, build, update) return install_folder = _make_abs_path(install_folder, cwd) conanfile_path = _get_conanfile_path(path, cwd, py=None) manager = self._init_manager(recorder) manager.install(reference=conanfile_path, install_folder=install_folder, remote_name=remote_name, profile=profile, build_modes=build, update=update, manifest_folder=manifest_folder, manifest_verify=manifest_verify, manifest_interactive=manifest_interactive, generators=generators, no_imports=no_imports) return recorder.get_info() except ConanException as exc: recorder.error = True exc.info = recorder.get_info() raise