コード例 #1
0
ファイル: versionstest.py プロジェクト: pombredanne/conary
    def testVersion(self):
        self.assertRaises(ParseError, VersionFromString, "0.50.1")

        verStr = "/foo.com@spc:bar/1.000:1.2-3/bang.com@spc:branch/10.000:2.4-5"
        verStr2 = "/foo.com@spc:bar/1.000:1.2-3/bang.com@spc:branch/15.000:2.4-6"
        v = ThawVersion(verStr)
        assert v.freeze() == verStr
        assert v.asString(VersionFromString("/foo.com@spc:bar")) == "1.2-3/bang.com@spc:branch/2.4-5"
        assert v.timeStamps() == [1, 10]
        v = v.copy()
        v.incrementSourceCount()
        assert v.asString() == ThawVersion(verStr2).asString()
        assert v.getHost() == "bang.com"

        # test that cPickle works on a Version object (the changeset cache
        # database pickles versions)
        vpickled = cPickle.dumps(v)
        vunpickled = cPickle.loads(vpickled)
        assert vunpickled.asString() == v.asString()

        v2 = VersionFromString("/foo.com@spc:bar/1.2-3/bang.com@spc:branch/2.4-5", timeStamps=[1.000, 10.000])
        assert v2.freeze() == verStr
        assert [x.asString() for x in v2.iterLabels()] == ["foo.com@spc:bar", "bang.com@spc:branch"]

        last = v.trailingRevision()
        assert last.asString() == "2.4-6"
        assert not v.onLocalLabel()
        assert not v.isInLocalNamespace()
        assert not v.onEmergeLabel()
        assert not v.onLocalCookLabel()
        assert v2.getHost() == "bang.com"

        assert v.trailingLabel() == Label("bang.com@spc:branch")

        branch = v.branch()
        assert branch.getHost() == "bang.com"
        strrep = branch.asString()
        assert strrep == "/foo.com@spc:bar/1.2-3/bang.com@spc:branch"
        branch2 = VersionFromString(branch.asString())
        assert branch == branch2

        frozen = branch.freeze()
        branch2 = ThawVersion(frozen)
        assert branch2 == branch

        newVer = branch2.createVersion(Revision("1.1-2"))
        assert newVer.asString() == "/foo.com@spc:bar/1.2-3/bang.com@spc:branch/1.1-2"
        assert not newVer.onLocalLabel()
        assert not newVer.isInLocalNamespace()
        assert not newVer.onEmergeLabel()
        assert not newVer.onLocalCookLabel()
        assert not newVer.isOnLocalHost()

        assert newVer.canonicalVersion() == newVer
        assert v.hasParentVersion()
        parent = v.parentVersion()
        assert not parent.hasParentVersion()
        assert parent.asString() == "/foo.com@spc:bar/1.2-3"

        # check emerge label
        emerge = parent.createBranch(EmergeLabel(), withVerRel=1)
        assert emerge.getHost() == "local"
        assert emerge.asString() == "/foo.com@spc:bar/1.2-3/local@local:EMERGE/3"
        assert not emerge.onLocalLabel()
        assert emerge.onEmergeLabel()
        assert not emerge.onRollbackLabel()
        assert not emerge.onLocalCookLabel()
        assert emerge.isOnLocalHost()
        assert emerge.isInLocalNamespace()

        # check local cook label
        cook = parent.createBranch(CookLabel(), withVerRel=1)
        assert cook.asString() == "/foo.com@spc:bar/1.2-3/local@local:COOK/3"
        assert not cook.onLocalLabel()
        assert not cook.onEmergeLabel()
        assert not cook.onRollbackLabel()
        assert cook.onLocalCookLabel()
        assert cook.isOnLocalHost()
        assert cook.isInLocalNamespace()

        # check local rollback label
        branch2 = parent.createBranch(RollbackLabel(), withVerRel=1)
        assert branch2.asString() == "/foo.com@spc:bar/1.2-3/local@local:ROLLBACK/3"
        assert not branch2.onLocalLabel()
        assert not branch2.onEmergeLabel()
        assert branch2.onRollbackLabel()
        assert not branch2.onLocalCookLabel()
        assert branch2.isOnLocalHost()
        assert branch2.isInLocalNamespace()

        # check local branch label
        branch2 = parent.createBranch(LocalLabel(), withVerRel=1)
        assert branch2.asString() == "/foo.com@spc:bar/1.2-3/local@local:LOCAL/3"
        assert branch2.onLocalLabel()
        assert not branch2.onEmergeLabel()
        assert not branch2.onRollbackLabel()
        assert not branch2.onLocalCookLabel()
        assert branch2.isOnLocalHost()
        assert branch2.isInLocalNamespace()

        branch3 = VersionFromString(branch2.asString())
        assert branch2 == branch3

        branch2 = branch2.branch()
        assert branch2.asString() == "/foo.com@spc:bar/1.2-3/local@local:LOCAL"

        parent = v.parentVersion()
        assert parent.asString() == "/foo.com@spc:bar/1.2-3"
        branch2 = parent.createBranch(LocalLabel())
        assert branch2.asString() == "/foo.com@spc:bar/1.2-3/local@local:LOCAL"

        shadow = parent.branch().createShadow(Label("foo.com@spc:shadow"))
        assert shadow.asString() == "/foo.com@spc:bar//shadow"
        assert shadow.getHost() == "foo.com"

        branch = VersionFromString("/foo.com@spc:bar")
        v = VersionFromString("1.2-3", branch)
        assert v.asString() == "/foo.com@spc:bar/1.2-3"

        # test getBinaryVersion and getSourceVersion
        v = ThawVersion(verStr)
        b = v.getBinaryVersion()
        assert b.asString() == "/foo.com@spc:bar/1.2-3-0/bang.com@spc:branch/2.4-5"

        # make sure slots are working
        v = ThawVersion("/foo.com@spec:bar/10:1.2-3")
        self.assertRaises(AttributeError, v.__setattr__, "foo", 1)
        v = ThawVersion(v.freeze())
        self.assertRaises(AttributeError, v.__setattr__, "foo", 1)

        v = VersionFromString("/localhost@rpl:linux/1.0-1-0/" "local@local:EMERGE/1/COOK/2")
        assert VersionFromString(v.asString()) == v
コード例 #2
0
ファイル: current.py プロジェクト: balusarakesh/mirrorball
    def _mangleGroups(self, group):
        """
        Map all packages in the group to packages on the prod label
        using the clonedFrom information
        """

        log.info('mangling the group model')

        grpPkgs = {}

        toProd = {}

        toRemove = set()

        parent = False

        clonedFromMap = dict(self._updater._conaryhelper.getClonedFromForLabel(self._cfg.targetLabel))

        for pkg in group.iterpackages():
            if not pkg.version:
                continue
            name = str(pkg.name)
            version = ThawVersion(str(pkg.version))
            flavor = ThawFlavor(str(pkg.flavor))

            grpPkgs.setdefault((name, version), set()).add(flavor)


        for (name, version), flavors in grpPkgs.iteritems():
            for flavor in flavors:
                # Get the nevra for this name, version, and flavor
                nevra = clonedFromMap.get((name, version, flavor))

                # If the package is already in the toAdd map, skip over it.
                if [ x for x in toProd
                    if x[0] == name and flavor in toProd[(x[0], x[1])] ]:
                    log.warn('%s %s is already in the toProd map' % (name,flavor))
                    continue


                # Package didn't change not sure this should happen
                if not nevra and (name,version,flavor) in clonedFromMap.values():
                    continue

                # Another hack for rhel 5 client workstation
                if self._cfg.topParentSourceGroup:
                    parent = True

                if 'rhel-5-client-workstation' in str(self._cfg.topSourceGroup):
                    parent = True

                if not nevra and parent:
                    log.warn('Child platform')
                    for original, clone in clonedFromMap.iteritems(): 
                        if (name == original[0] and 
                            version.trailingRevision() == original[1].trailingRevision() 
                            and flavor == original[2]):
                            log.warn('adding %s' % str(clone))
                            n2, v2, f2 = clone
                            toProd.setdefault((n2, v2), set()).add(f2)
                            toRemove.add((name, version, flavor))
                            break
                    continue

                # Feels like a hack for RHEL4AS... might revisit this later
                #if not flavor.thaw():
                #    log.warn('No flavor for %s %s %s' % (name, version, flavor))
                #    for original, clone in clonedFromMap.iteritems(): 
                #        if original[0] == name and original[1] == version:
                #            n2, v2, f2 = clone
                #            toProd.setdefault((n2, v2), set()).add(f2)
                #    toRemove.add((name, version, flavor))
                #    continue

                toRemove.add((name, version, flavor))

                n2, v2, f2 = nevra
                toProd.setdefault((n2, v2), set()).add(f2)

        ##
        # Remove any packages that were flagged for removal.
        ##

        for n, v, f in toRemove:
            log.info('removing %s[%s]' % (n, f))
            group.removePackage(n, flavor=f)

        ##
        # Actually add the packages to the group model.
        ##

        for (name, version), flavors in toProd.iteritems():
            for f in flavors:
                log.info('adding %s=%s[%s]' % (name, version, f))
            group.addPackage(name, version, flavors)

        return group
コード例 #3
0
    def testVersion(self):
        self.assertRaises(ParseError, VersionFromString, '0.50.1')

        verStr = "/foo.com@spc:bar/1.000:1.2-3/bang.com@spc:branch/10.000:2.4-5"
        verStr2 = "/foo.com@spc:bar/1.000:1.2-3/bang.com@spc:branch/15.000:2.4-6"
        v = ThawVersion(verStr)
        assert (v.freeze() == verStr)
        assert (v.asString(VersionFromString("/foo.com@spc:bar")) ==
                "1.2-3/bang.com@spc:branch/2.4-5")
        assert (v.timeStamps() == [1, 10])
        v = v.copy()
        v.incrementSourceCount()
        assert (v.asString() == ThawVersion(verStr2).asString())
        assert (v.getHost() == 'bang.com')

        # test that cPickle works on a Version object (the changeset cache
        # database pickles versions)
        vpickled = cPickle.dumps(v)
        vunpickled = cPickle.loads(vpickled)
        assert (vunpickled.asString() == v.asString())

        v2 = VersionFromString(
            "/foo.com@spc:bar/1.2-3/bang.com@spc:branch/2.4-5",
            timeStamps=[1.000, 10.000])
        assert (v2.freeze() == verStr)
        assert ([x.asString() for x in v2.iterLabels()
                 ] == ['foo.com@spc:bar', 'bang.com@spc:branch'])

        last = v.trailingRevision()
        assert (last.asString() == "2.4-6")
        assert (not v.onLocalLabel())
        assert (not v.isInLocalNamespace())
        assert (not v.onEmergeLabel())
        assert (not v.onLocalCookLabel())
        assert (v2.getHost() == 'bang.com')

        assert (v.trailingLabel() == Label('bang.com@spc:branch'))

        branch = v.branch()
        assert (branch.getHost() == 'bang.com')
        strrep = branch.asString()
        assert (strrep == "/foo.com@spc:bar/1.2-3/bang.com@spc:branch")
        branch2 = VersionFromString(branch.asString())
        assert (branch == branch2)

        frozen = branch.freeze()
        branch2 = ThawVersion(frozen)
        assert (branch2 == branch)

        newVer = branch2.createVersion(Revision("1.1-2"))
        assert (newVer.asString() ==
                "/foo.com@spc:bar/1.2-3/bang.com@spc:branch/1.1-2")
        assert (not newVer.onLocalLabel())
        assert (not newVer.isInLocalNamespace())
        assert (not newVer.onEmergeLabel())
        assert (not newVer.onLocalCookLabel())
        assert (not newVer.isOnLocalHost())

        assert (newVer.canonicalVersion() == newVer)
        assert (v.hasParentVersion())
        parent = v.parentVersion()
        assert (not parent.hasParentVersion())
        assert (parent.asString() == "/foo.com@spc:bar/1.2-3")

        # check emerge label
        emerge = parent.createBranch(EmergeLabel(), withVerRel=1)
        assert (emerge.getHost() == 'local')
        assert (
            emerge.asString() == "/foo.com@spc:bar/1.2-3/local@local:EMERGE/3")
        assert (not emerge.onLocalLabel())
        assert (emerge.onEmergeLabel())
        assert (not emerge.onRollbackLabel())
        assert (not emerge.onLocalCookLabel())
        assert (emerge.isOnLocalHost())
        assert (emerge.isInLocalNamespace())

        # check local cook label
        cook = parent.createBranch(CookLabel(), withVerRel=1)
        assert (cook.asString() == "/foo.com@spc:bar/1.2-3/local@local:COOK/3")
        assert (not cook.onLocalLabel())
        assert (not cook.onEmergeLabel())
        assert (not cook.onRollbackLabel())
        assert (cook.onLocalCookLabel())
        assert (cook.isOnLocalHost())
        assert (cook.isInLocalNamespace())

        # check local rollback label
        branch2 = parent.createBranch(RollbackLabel(), withVerRel=1)
        assert (branch2.asString() ==
                "/foo.com@spc:bar/1.2-3/local@local:ROLLBACK/3")
        assert (not branch2.onLocalLabel())
        assert (not branch2.onEmergeLabel())
        assert (branch2.onRollbackLabel())
        assert (not branch2.onLocalCookLabel())
        assert (branch2.isOnLocalHost())
        assert (branch2.isInLocalNamespace())

        # check local branch label
        branch2 = parent.createBranch(LocalLabel(), withVerRel=1)
        assert (
            branch2.asString() == "/foo.com@spc:bar/1.2-3/local@local:LOCAL/3")
        assert (branch2.onLocalLabel())
        assert (not branch2.onEmergeLabel())
        assert (not branch2.onRollbackLabel())
        assert (not branch2.onLocalCookLabel())
        assert (branch2.isOnLocalHost())
        assert (branch2.isInLocalNamespace())

        branch3 = VersionFromString(branch2.asString())
        assert (branch2 == branch3)

        branch2 = branch2.branch()
        assert (
            branch2.asString() == "/foo.com@spc:bar/1.2-3/local@local:LOCAL")

        parent = v.parentVersion()
        assert (parent.asString() == "/foo.com@spc:bar/1.2-3")
        branch2 = parent.createBranch(LocalLabel())
        assert (
            branch2.asString() == "/foo.com@spc:bar/1.2-3/local@local:LOCAL")

        shadow = parent.branch().createShadow(Label('foo.com@spc:shadow'))
        assert (shadow.asString() == "/foo.com@spc:bar//shadow")
        assert (shadow.getHost() == 'foo.com')

        branch = VersionFromString("/foo.com@spc:bar")
        v = VersionFromString("1.2-3", branch)
        assert (v.asString() == "/foo.com@spc:bar/1.2-3")

        # test getBinaryVersion and getSourceVersion
        v = ThawVersion(verStr)
        b = v.getBinaryVersion()
        assert (b.asString() ==
                "/foo.com@spc:bar/1.2-3-0/bang.com@spc:branch/2.4-5")

        # make sure slots are working
        v = ThawVersion("/foo.com@spec:bar/10:1.2-3")
        self.assertRaises(AttributeError, v.__setattr__, "foo", 1)
        v = ThawVersion(v.freeze())
        self.assertRaises(AttributeError, v.__setattr__, "foo", 1)

        v = VersionFromString('/localhost@rpl:linux/1.0-1-0/'
                              'local@local:EMERGE/1/COOK/2')
        assert (VersionFromString(v.asString()) == v)