示例#1
0
    def testFlavorSetOps(self):
        a = parseFlavor('foo,bar is: x86')
        b = parseFlavor('foo,~!bar')
        x = a & b
        assert(x.freeze() == '5#use:foo')
        x = a - b
        assert(x.freeze() == '1#x86|5#use:bar')
        x = flavorDifferences((a,b))
        assert(x[a].freeze() == '1#x86|5#use:bar')
        assert(x[b].freeze() == '5#use:~!bar')
        a = DependencySet()
        a.addDep(TroveDependencies, Dependency("foo:runtime"))

        assert(a.copy() & a == a)
        assert(not (a - a))
        x = flavorDifferences((a, a))
        assert(not x[a])

        #now test non-strict ops
        a = parseFlavor('foo,bar')
        b = parseFlavor('~foo,~!bar,bam')
        assert(str(a.intersection(b, strict=False)) == 'foo')
        assert(str(a.difference(b, strict=False)) == 'bar')
        assert(str(flavorDifferences([a, b],strict=False)[a]) == 'bar')
        assert(str(flavorDifferences([a, b],strict=False)[b]) == 'bam,~!bar')

        # test empty set
        assert(flavorDifferences([]) == {})
示例#2
0
文件: query.py 项目: pombreda/rmake-2
def getFlavorSpecs(job):
    flavorsByName = {}
    for nvf in job.iterTroveList():
        flavorsByName.setdefault(nvf[0], []).append(nvf[2])
    for trove in job.iterTroves():
        if not trove:
            continue
        for nvf in trove.iterBuiltTroves():
            flavorsByName.setdefault(nvf[0], []).append(nvf[2])
    for name, flavorList in flavorsByName.items():
	allFlavors = []
        for flavor in flavorList:
            archFlags = flavorutil.getArchFlags(flavor, withFlags=False)
            flavorsByName[name, flavor] = archFlags
	if len(set(allFlavors)) != len(allFlavors):
            diffs = deps.flavorDifferences(flavorList)
            for flavor in flavorList:
                 archFlags = flavorsByName[name, flavor]
                 archFlags.union(diffs[flavor])
    return flavorsByName
示例#3
0
文件: query.py 项目: pombreda/rmake3
def getFlavorSpecs(job):
    flavorsByName = {}
    for nvf in job.iterTroveList():
        flavorsByName.setdefault(nvf[0], []).append(nvf[2])
    for trove in job.iterTroves():
        if not trove:
            continue
        for nvf in trove.iterBuiltTroves():
            flavorsByName.setdefault(nvf[0], []).append(nvf[2])
    for name, flavorList in flavorsByName.items():
	allFlavors = []
        for flavor in flavorList:
            archFlags = flavorutil.getArchFlags(flavor, withFlags=False)
            flavorsByName[name, flavor] = archFlags
	if len(set(allFlavors)) != len(allFlavors):
            diffs = deps.flavorDifferences(flavorList)
            for flavor in flavorList:
                 archFlags = flavorsByName[name, flavor]
                 archFlags.union(diffs[flavor])
    return flavorsByName
示例#4
0
文件: display.py 项目: pombr/conary
    def getTupleStrings(self, n, v, f):
        """
            returns potentially shortened display versions and flavors for
            a trove tuple.

            @param n: trove name
            @type n: str
            @param v: trove version
            @type v: versions.Version
            @param f: trove flavor
            @type f: deps.deps.Flavor
            @rtype: (vStr, fStr) where vStr is the version string to display
            for this trove and fStr is the flavor string (may be empty)
        """

        if self.dcfg.useFullVersions():
            vStr = str(v)
        elif self.dcfg.showLabels:
            vStr = '%s/%s' % (v.branch().label(), v.trailingRevision())
        elif len(self._vCache.get(n, [])) > 1:
            # print the trailing revision unless there
            # are two versions that are on different
            # branches.

            vers = self._vCache[n]
            branch = v.branch()

            vStr = None
            for ver in vers:
                if ver.branch() != branch:
                    vStr = str(v)

            if not vStr:
                vStr = str(v.trailingRevision())
        else:
            vStr = str(v.trailingRevision())

        if self.dcfg.useFullFlavors():
            fStr = str(f)
        else:
            # print only the flavor differences between
            # the two troves.

            # FIXME Document all this!
            if self.dcfg.affinityDb:
                installed = set()
                #installed = set([x[2] for x in self.dcfg.affinityDb.trovesByName(n)])
                installed.discard(f)
                installed = list(installed)
            else:
                installed = []

            flavors = list(self._fCache.get(n, []))
            if installed:
                for baseFlavor in self.dcfg.baseFlavors:
                    flavors += [ deps.overrideFlavor(baseFlavor, x) for x in installed ]
            else:
                flavors += self.dcfg.baseFlavors


            if len(flavors) > 1:
                fStr = deps.flavorDifferences(
                                    list(flavors) + installed + [f],
                                    strict=False)[f]

                ISD = deps.InstructionSetDependency
                if f.hasDepClass(ISD) and fStr.hasDepClass(ISD):
                    allDeps = set(x.name for x in f.iterDepsByClass(ISD))
                    allDeps.difference_update(x.name for x in
                                              fStr.iterDepsByClass(ISD))
                    for depName in allDeps:
                        fStr.addDep(ISD, deps.Dependency(depName))
                fStr = str(fStr)
            else:
                fStr = ''

        return vStr, fStr
示例#5
0
    def getTupleStrings(self, n, v, f):
        """
            returns potentially shortened display versions and flavors for
            a trove tuple.

            @param n: trove name
            @type n: str
            @param v: trove version
            @type v: versions.Version
            @param f: trove flavor
            @type f: deps.deps.Flavor
            @rtype: (vStr, fStr) where vStr is the version string to display
            for this trove and fStr is the flavor string (may be empty)
        """

        if self.dcfg.useFullVersions():
            vStr = str(v)
        elif self.dcfg.showLabels:
            vStr = '%s/%s' % (v.branch().label(), v.trailingRevision())
        elif len(self._vCache.get(n, [])) > 1:
            # print the trailing revision unless there
            # are two versions that are on different
            # branches.

            vers = self._vCache[n]
            branch = v.branch()

            vStr = None
            for ver in vers:
                if ver.branch() != branch:
                    vStr = str(v)

            if not vStr:
                vStr = str(v.trailingRevision())
        else:
            vStr = str(v.trailingRevision())

        if self.dcfg.useFullFlavors():
            fStr = str(f)
        else:
            # print only the flavor differences between
            # the two troves.

            # FIXME Document all this!
            if self.dcfg.affinityDb:
                installed = set()
                #installed = set([x[2] for x in self.dcfg.affinityDb.trovesByName(n)])
                installed.discard(f)
                installed = list(installed)
            else:
                installed = []

            flavors = list(self._fCache.get(n, []))
            if installed:
                for baseFlavor in self.dcfg.baseFlavors:
                    flavors += [
                        deps.overrideFlavor(baseFlavor, x) for x in installed
                    ]
            else:
                flavors += self.dcfg.baseFlavors

            if len(flavors) > 1:
                fStr = deps.flavorDifferences(list(flavors) + installed + [f],
                                              strict=False)[f]

                ISD = deps.InstructionSetDependency
                if f.hasDepClass(ISD) and fStr.hasDepClass(ISD):
                    allDeps = set(x.name for x in f.iterDepsByClass(ISD))
                    allDeps.difference_update(
                        x.name for x in fStr.iterDepsByClass(ISD))
                    for depName in allDeps:
                        fStr.addDep(ISD, deps.Dependency(depName))
                fStr = str(fStr)
            else:
                fStr = ''

        return vStr, fStr