def _create_new_node(self, current_node, dep_graph, requirement, name_req, check_updates, update, remote_name, processed_profile, alias_ref=None): """ creates and adds a new node to the dependency graph """ try: result = self._proxy.get_recipe(requirement.ref, check_updates, update, remote_name, self._recorder) except ConanException as e: if current_node.ref: self._output.error( "Failed requirement '%s' from '%s'" % (requirement.ref, current_node.conanfile.display_name)) raise e conanfile_path, recipe_status, remote, new_ref = result dep_conanfile = self._loader.load_conanfile(conanfile_path, processed_profile, ref=requirement.ref) if recipe_status == RECIPE_EDITABLE: dep_conanfile.in_local_cache = False dep_conanfile.develop = True if getattr(dep_conanfile, "alias", None): alias_ref = alias_ref or new_ref.copy_clear_rev() requirement.ref = ConanFileReference.loads(dep_conanfile.alias) dep_graph.aliased[alias_ref] = requirement.ref return self._create_new_node(current_node, dep_graph, requirement, name_req, check_updates, update, remote_name, processed_profile, alias_ref=alias_ref) logger.debug("GRAPH: new_node: %s" % str(new_ref)) new_node = Node(new_ref, dep_conanfile) new_node.revision_pinned = requirement.ref.revision is not None new_node.recipe = recipe_status new_node.remote = remote new_node.ancestors = current_node.ancestors.copy() new_node.ancestors.add(current_node.name) dep_graph.add_node(new_node) dep_graph.add_edge(current_node, new_node, requirement.private, requirement.build_require) return new_node
def _create_new_node(self, current_node, dep_graph, requirement, check_updates, update, remotes, profile, graph_lock): result = self._resolve_recipe(current_node, dep_graph, requirement, check_updates, update, remotes, profile, graph_lock) new_ref, dep_conanfile, recipe_status, remote, locked_id = result logger.debug("GRAPH: new_node: %s" % str(new_ref)) new_node = Node(new_ref, dep_conanfile) new_node.revision_pinned = requirement.ref.revision is not None new_node.recipe = recipe_status new_node.remote = remote # Ancestors are a copy of the parent, plus the parent itself new_node.ancestors = current_node.ancestors.copy() new_node.ancestors.add(current_node.name) if locked_id is not None: new_node.id = locked_id dep_graph.add_node(new_node) dep_graph.add_edge(current_node, new_node, requirement) return new_node
def _create_new_node(self, current_node, dep_graph, requirement, name_req, check_updates, update, remotes, processed_profile, graph_lock, alias_ref=None): """ creates and adds a new node to the dependency graph """ try: result = self._proxy.get_recipe(requirement.ref, check_updates, update, remotes, self._recorder) except ConanException as e: if current_node.ref: self._output.error( "Failed requirement '%s' from '%s'" % (requirement.ref, current_node.conanfile.display_name)) raise e conanfile_path, recipe_status, remote, new_ref = result locked_id = requirement.locked_id lock_python_requires = graph_lock.python_requires( locked_id) if locked_id else None dep_conanfile = self._loader.load_conanfile( conanfile_path, processed_profile, ref=requirement.ref, lock_python_requires=lock_python_requires) if recipe_status == RECIPE_EDITABLE: dep_conanfile.in_local_cache = False dep_conanfile.develop = True if getattr(dep_conanfile, "alias", None): alias_ref = alias_ref or new_ref.copy_clear_rev() requirement.ref = ConanFileReference.loads(dep_conanfile.alias) dep_graph.aliased[alias_ref] = requirement.ref return self._create_new_node(current_node, dep_graph, requirement, name_req, check_updates, update, remotes, processed_profile, graph_lock, alias_ref=alias_ref) logger.debug("GRAPH: new_node: %s" % str(new_ref)) new_node = Node(new_ref, dep_conanfile) new_node.revision_pinned = requirement.ref.revision is not None new_node.recipe = recipe_status new_node.remote = remote # Ancestors are a copy of the parent, plus the parent itself new_node.ancestors = current_node.ancestors.copy() new_node.ancestors.add(current_node.name) if locked_id: new_node.id = locked_id # build-requires and private affect transitively. If "node" is already # a build_require or a private one, its requirements will inherit that property # Or if the require specify that property, then it will get it too new_node.build_require = current_node.build_require or requirement.build_require new_node.private = current_node.private or requirement.private dep_graph.add_node(new_node) dep_graph.add_edge(current_node, new_node, requirement) return new_node