Example #1
0
    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
Example #2
0
    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
Example #3
0
    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