Exemple #1
0
 def make_dep_tree(self, pkg_list, filter_callback):
     """
     - pkg_list: List of package names.
     - filter_callback: Function that takes a package name
       and returns True if the package should go into the tree.
     """
     # - all of pkg_list goes into a set P
     # - init an empty dict D
     # - for every element p of P:
     #   - create a full dep tree T
     #   - D[p] -> T
     #   - for every element q of P\p:
     #     - if q is in T, then P <- P\q and del(D[q]) if exists
     # - merge all elements of D into T' and return that
     pkg_set = set(filter(filter_callback, pkg_list))
     new_pkg_set = set(filter(filter_callback, pkg_list))
     dep_trees = {}
     for pkg in pkg_set:
         dep_trees[pkg] = self.make_tree_recursive(pkg, filter_callback)
         assert dep_trees[pkg] is not None
         for other_pkg in new_pkg_set.difference([pkg]):
             if other_pkg in dep_trees[pkg]:
                 new_pkg_set.remove(other_pkg)
     install_tree = TreeNode()
     for pkg in new_pkg_set:
         install_tree.add_child(dep_trees[pkg])
     return install_tree
Exemple #2
0
 def make_dep_tree(self, pkg_list, filter_callback):
     """
     - pkg_list: List of package names.
     - filter_callback: Function that takes a package name
       and returns True if the package should go into the tree.
     """
     # - all of pkg_list goes into a set P
     # - init an empty dict D
     # - for every element p of P:
     #   - create a full dep tree T
     #   - D[p] -> T
     #   - for every element q of P\p:
     #     - if q is in T, then P <- P\q and del(D[q]) if exists
     # - merge all elements of D into T' and return that
     pkg_set = set(filter(filter_callback, pkg_list))
     new_pkg_set = set(filter(filter_callback, pkg_list))
     dep_trees = {}
     for pkg in pkg_set:
         dep_trees[pkg] = self.make_tree_recursive(pkg, filter_callback)
         assert dep_trees[pkg] is not None
         for other_pkg in new_pkg_set.difference([pkg]):
             if other_pkg in dep_trees[pkg]:
                 new_pkg_set.remove(other_pkg)
     install_tree = TreeNode()
     for pkg in new_pkg_set:
         install_tree.add_child(dep_trees[pkg])
     return install_tree
Exemple #3
0
 def make_tree_recursive(self, pkg, filter_callback):
     """
     Make a dependency tree for one package
     """
     if not filter_callback(pkg):
         return None
     tree = TreeNode(pkg)
     deps = recipe.get_recipe(pkg).get_local_package_data()['depends'] or []
     for dep in deps:
         if dep is not None and not self.pm.exists(pkg):
             self.log.error(
                 "Package does not exist: {0} (declared as dependency for package {1})".format(
                     dep, pkg
                 )
             )
             exit(1)
     deps_to_install = set([
         dep for dep in deps \
         if dep is not None and filter_callback(dep) and not isinstance(dep, list) \
     ])
     for dep in deps_to_install:
         subtree = self.make_tree_recursive(dep, filter_callback)
         if subtree is not None:
             tree.add_child(subtree)
     return tree
Exemple #4
0
    def make_tree_recursive(self, pkg, filter_callback):
        """
        Make a dependency tree for one package.

        Assumption is that pkg actually needs to go into the tree, it will
        not get checked by filter_callback again.
        """
        assert pkg is not None
        tree = TreeNode(pkg)
        all_deps = recipe.get_recipe(pkg).depends or []
        deps_to_install = set([dep for dep in all_deps if filter_callback(dep)])
        for dep in deps_to_install:
            tree.add_child(self.make_tree_recursive(dep, filter_callback))
        return tree
 def make_tree_recursive(self, pkg, filter_callback):
     """
     Make a dependency tree for one package
     """
     if not filter_callback(pkg):
         return None
     tree = TreeNode(pkg)
     deps = recipe.get_recipe(pkg).depends or []
     for dep in deps:
         if not self.pm.exists(pkg):
             raise PBException(
                 "Package does not exist: {0} (declared as dependency for package {1})"
                 .format(dep, pkg))
     deps_to_install = set([dep for dep in deps if filter_callback(dep)])
     for dep in deps_to_install:
         subtree = self.make_tree_recursive(dep, filter_callback)
         if subtree is not None:
             tree.add_child(subtree)
     return tree
Exemple #6
0
 def make_tree_recursive(self, pkg, filter_callback):
     """
     Make a dependency tree for one package
     """
     if not filter_callback(pkg):
         return None
     tree = TreeNode(pkg)
     deps = recipe.get_recipe(pkg).depends or []
     for dep in deps:
         if not self.pm.exists(pkg):
             raise PBException(
                 "Package does not exist: {0} (declared as dependency for package {1})".format(
                     dep, pkg
                 )
             )
     deps_to_install = set([dep for dep in deps if filter_callback(dep)])
     for dep in deps_to_install:
         subtree = self.make_tree_recursive(dep, filter_callback)
         if subtree is not None:
             tree.add_child(subtree)
     return tree