示例#1
0
文件: Repository.py 项目: mjuric/eups
    def _listLatestProducts(self, product, flavor):
        prods = self.distServer.listAvailableProducts(product, None, flavor)
        names = {}
        flavors = {}
        out = []
        for p in prods:
            names[p[0]] = 1
            flavors[p[2]] = 1
        names = list(names.keys())
        names.sort()
        flavors = [f for f in flavors.keys() if f != "generic"]
        flavors.sort()
        flavors.insert(0, "generic")
        
        for name in names:
            for flav in flavors:
                latest = [p for p in prods if p[0] == name and p[2] == flav]
                latest.sort(**cmp_or_key(lambda a,b: self.eups.version_cmp(a[1],b[1])))
                out.extend(latest)

        return out
示例#2
0
    def _listLatestProducts(self, product, flavor):
        prods = self.distServer.listAvailableProducts(product, None, flavor)
        names = {}
        flavors = {}
        out = []
        for p in prods:
            names[p[0]] = 1
            flavors[p[2]] = 1
        names = list(names.keys())
        names.sort()
        flavors = [f for f in flavors.keys() if f != "generic"]
        flavors.sort()
        flavors.insert(0, "generic")

        for name in names:
            for flav in flavors:
                latest = [p for p in prods if p[0] == name and p[2] == flav]
                latest.sort(**cmp_or_key(lambda a,b: self.eups.version_cmp(a[1],b[1])))
                out.extend(latest)

        return out
示例#3
0
文件: Repository.py 项目: mjuric/eups
    def _getPackageLookup(self):
        if not self.distServer:
            return dict(_sortOrder=[])

        # Look for both generic and flavor-specific packages
        pkgs = self.distServer.listAvailableProducts(flavor=self.flavor)
        if self.flavor != None:
            for p in self.distServer.listAvailableProducts(flavor=None):
                if not pkgs.count(p):
                    pkgs.append(p)
        #
        # arrange into a hierarchical lookup
        #
        lookup = {}  # key is product == pkg[0]
        for pkg in pkgs:
            if pkg[0] not in lookup:   
                lookup[pkg[0]] = {}                # key is flavor == pkg[2]
            if pkg[2] not in lookup[pkg[0]]:
                lookup[pkg[0]][pkg[2]] = []        # list of versions == pkg[1]
            lookup[pkg[0]][pkg[2]].append(pkg[1])

        # now sort the contents
        keys = list(lookup.keys())
        keys.sort()
        lookup["_sortOrder"] = keys

        for prod in lookup["_sortOrder"]:
            keys = [f for f in lookup[prod].keys() if f != "generic"]
            keys.sort()
            if "generic" in lookup[prod].keys():
                keys.insert(0, "generic")
            lookup[prod]["_sortOrder"] = keys

            for flav in lookup[prod]["_sortOrder"]:
                lookup[prod][flav].sort(**cmp_or_key(self.eups.version_cmp))

        return lookup
示例#4
0
    def _getPackageLookup(self):
        if not self.distServer:
            return dict(_sortOrder=[])

        # Look for both generic and flavor-specific packages
        pkgs = self.distServer.listAvailableProducts(flavor=self.flavor)
        if self.flavor != None:
            for p in self.distServer.listAvailableProducts(flavor=None):
                if not pkgs.count(p):
                    pkgs.append(p)
        #
        # arrange into a hierarchical lookup
        #
        lookup = {}  # key is product == pkg[0]
        for pkg in pkgs:
            if pkg[0] not in lookup:
                lookup[pkg[0]] = {}                # key is flavor == pkg[2]
            if pkg[2] not in lookup[pkg[0]]:
                lookup[pkg[0]][pkg[2]] = []        # list of versions == pkg[1]
            lookup[pkg[0]][pkg[2]].append(pkg[1])

        # now sort the contents
        keys = list(lookup.keys())
        keys.sort()
        lookup["_sortOrder"] = keys

        for prod in lookup["_sortOrder"]:
            keys = [f for f in lookup[prod].keys() if f != "generic"]
            keys.sort()
            if "generic" in lookup[prod].keys():
                keys.insert(0, "generic")
            lookup[prod]["_sortOrder"] = keys

            for flav in lookup[prod]["_sortOrder"]:
                lookup[prod][flav].sort(**cmp_or_key(self.eups.version_cmp))

        return lookup
示例#5
0
    def findProducts(self, name, versions=None, flavors=None):
        """
        return a list of Products matching the given inputs

        @param name :     the name of the desired product
        @param versions : the desired versions.  If versions is None,
                            return all declared versions of the product.
        @param flavors :  the desired flavors.  If None, return matching
                            products of all declared flavors.
        @return Product[] : a list of the matching products
        """
        if versions is None:
            versions = self.findVersions(name)

        if not isinstance(versions, list):
            versions = [versions]

        if flavors is not None and not isinstance(flavors, list):
            flavors = [flavors]

        out = {}
        for vers in versions:
            vfile = self._versionFile(name, vers)
            if not os.path.exists(vfile):
                continue
            vfile = VersionFile(vfile, name, vers)

            flavs = flavors
            declared = vfile.getFlavors()
            if flavs is None: flavs = declared
            out[vers] = {}
            for f in flavs:
                if f in declared:
                    out[vers][f] = vfile.makeProduct(f, self.defStackRoot,
                                                     self.dbpath)

        if len(out.keys()) == 0:
            return []

        pdir = self._productDir(name)
        if not os.path.exists(pdir):
            raise RuntimeError(
                "programmer error: product directory disappeared")

        # add in the tags
        for tag, vers, flavor in self.getTagAssignments(name):
            try:
                out[vers][flavor].tags.append(tag)
            except KeyError:
                pass


#  not sure why this doesn't work:
#        out = reduce(lambda x,y: x.extend(y),
#                     map(lambda z:  z.values(), out.values()))
#        out.sort(_cmp_by_verflav)
#
#  replaced with moral equivalent:
#
        v = [list(z.values()) for z in out.values()]
        x = v[0]
        for y in v[1:]:
            x.extend(y)
        x.sort(**cmp_or_key(_cmp_by_verflav))
        return x
示例#6
0
    def findProducts(self, name, versions=None, flavors=None):
        """
        return a list of Products matching the given inputs

        @param name :     the name of the desired product
        @param versions : the desired versions.  If versions is None, 
                            return all declared versions of the product.
        @param flavors :  the desired flavors.  If None, return matching 
                            products of all declared flavors.
        @return Product[] : a list of the matching products
        """
        if versions is None:
            versions = self.findVersions(name)

        if not isinstance(versions, list):
            versions = [versions]

        if flavors is not None and not isinstance(flavors, list):
            flavors = [flavors]

        out = {}
        for vers in versions:
            vfile = self._versionFile(name, vers)
            if not os.path.exists(vfile):
                continue
            vfile = VersionFile(vfile, name, vers)
                                
            flavs = flavors
            declared = vfile.getFlavors()
            if flavs is None:  flavs = declared
            out[vers] = {}
            for f in flavs:
                if f in declared:
                    out[vers][f] = vfile.makeProduct(f, self.defStackRoot, 
                                                     self.dbpath)

        if len(out.keys()) == 0:
            return []

        pdir = self._productDir(name)
        if not os.path.exists(pdir):
          raise RuntimeError("programmer error: product directory disappeared")

        # add in the tags 
        for tag, vers, flavor in self.getTagAssignments(name):
            try: 
                out[vers][flavor].tags.append(tag)
            except KeyError:
                pass

#  not sure why this doesn't work:
#        out = reduce(lambda x,y: x.extend(y), 
#                     map(lambda z:  z.values(), out.values()))
#        out.sort(_cmp_by_verflav)
#
#  replaced with moral equivalent:
#                          
        v = [list(z.values()) for z in out.values()]
        x = v[0]
        for y in v[1:]:  x.extend(y)
        x.sort(**cmp_or_key(_cmp_by_verflav))
        return x