Exemple #1
0
 def removeRelation(self, node, next, quiet=False):
     """Drop the "RpmPackage node requires RpmPackage next" arc."""
     if not quiet:
         txt = "Removing"
         if self[node].pre[next]:
             txt = "Zapping"
         log.debug4("%s requires for %s from %s",
                    txt, next.getNEVRA(), node.getNEVRA())
     del self[node].pre[next]
     del self[next].post[node]
Exemple #2
0
 def removeRelation(self, node, next, quiet=False):
     """Drop the "RpmPackage node requires RpmPackage next" arc."""
     if not quiet:
         txt = "Removing"
         if self[node].pre[next]:
             txt = "Zapping"
         log.debug4("%s requires for %s from %s", txt, next.getNEVRA(),
                    node.getNEVRA())
     del self[node].pre[next]
     del self[next].post[node]
Exemple #3
0
    def processLeafNodes(self, order, leaflist=None):
        """Move topologically sorted "trailing" packages from
        orderer.RpmRelations relations to start of list."""
        if leaflist is None:
            leaflist = self # loop over all pkgs

        # do a bucket sort
        leafs = {} # len(post) -> [leaf pkgs]
        for pkg in leaflist:
            if not self[pkg].pre:
                post = len(self[pkg].post)
                leafs.setdefault(post, []).append(pkg)

        if leafs:
            max_post = max(leafs)

        while leafs:
            # remove leaf node
            leaf = leafs[max_post].pop()
            rels = self[leaf]
            log.debug4("%s", leaf.getNEVRA())
            self.collect(leaf, order)
            # check post nodes if they got a leaf now
            new_max = max_post
            for pkg in rels.post:
                if not self[pkg].pre:
                    post = len(self[pkg].post)
                    leafs.setdefault(post, []).append(pkg)
                    if post > new_max:
                        new_max = post
            # select new (highest) bucket
            if not leafs[max_post]:
                del leafs[max_post]
                if leafs:
                    max_post = max(leafs)
            else:
                max_post = new_max
Exemple #4
0
    def processLeafNodes(self, order, leaflist=None):
        """Move topologically sorted "trailing" packages from
        orderer.RpmRelations relations to start of list."""
        if leaflist is None:
            leaflist = self  # loop over all pkgs

        # do a bucket sort
        leafs = {}  # len(post) -> [leaf pkgs]
        for pkg in leaflist:
            if not self[pkg].pre:
                post = len(self[pkg].post)
                leafs.setdefault(post, []).append(pkg)

        if leafs:
            max_post = max(leafs)

        while leafs:
            # remove leaf node
            leaf = leafs[max_post].pop()
            rels = self[leaf]
            log.debug4("%s", leaf.getNEVRA())
            self.collect(leaf, order)
            # check post nodes if they got a leaf now
            new_max = max_post
            for pkg in rels.post:
                if not self[pkg].pre:
                    post = len(self[pkg].post)
                    leafs.setdefault(post, []).append(pkg)
                    if post > new_max:
                        new_max = post
            # select new (highest) bucket
            if not leafs[max_post]:
                del leafs[max_post]
                if leafs:
                    max_post = max(leafs)
            else:
                max_post = new_max
Exemple #5
0
 def printRel(self):
     """Print relations."""
     if not log.isDebugLoggingHere(log.DEBUG4):
         return
     log.debug4("\t==== relations (%d) "
                "==== #pre-relations #post-relations "
                "package pre-relation-packages, '*' marks prereq's",
                len(self))
     for pkg in self:
         rel = self[pkg]
         pre = ""
         if len(rel.pre) > 0:
             pre = ": "
             for p in rel.pre:
                 if len(pre) > 2:
                     pre += ", "
                 if rel.pre[p]:
                     pre += "*" # prereq
                 pre += p.getNEVRA()
         log.debug4("\t%d %d %s%s",
                    len(rel.pre), len(rel.post), pkg.getNEVRA(), pre)
     log.debug4("\t==== relations ====")
Exemple #6
0
 def printRel(self):
     """Print relations."""
     if not log.isDebugLoggingHere(log.DEBUG4):
         return
     log.debug4(
         "\t==== relations (%d) "
         "==== #pre-relations #post-relations "
         "package pre-relation-packages, '*' marks prereq's", len(self))
     for pkg in self:
         rel = self[pkg]
         pre = ""
         if len(rel.pre) > 0:
             pre = ": "
             for p in rel.pre:
                 if len(pre) > 2:
                     pre += ", "
                 if rel.pre[p]:
                     pre += "*"  # prereq
                 pre += p.getNEVRA()
         log.debug4("\t%d %d %s%s", len(rel.pre), len(rel.post),
                    pkg.getNEVRA(), pre)
     log.debug4("\t==== relations ====")