コード例 #1
0
ファイル: recipeutiltest.py プロジェクト: pombreda/rmake-2
    def testLoadInstalledInRoot(self):
        # make sure that we find this autoconf213 trove even though it's
        # been built.  (RMK-371)
        self.openRepository()
        repos = self.openRmakeRepository()

        sourceV = VFS('/localhost@rpl:1//autoconf213/2.13-1.1')
        binV = sourceV.createShadow(versions.Label('rmakehost@rpl:1'))
        binV.incrementBuildCount()

        loadInstalledRecipe = fixtures.loadInstalledRecipe.replace(
                                "loadInstalled('loaded')",
                                "loadInstalled('loaded=:autoconf213')")
        self.addComponent('loaded:runtime', str(binV))
        trv = self.addCollection('loaded', str(binV), [':runtime'])
        self.updatePkg('loaded=rmakehost@rpl:1')
        self.addComponent('loaded:source', str(sourceV),
                          [('loaded.recipe',
                            fixtures.loadedRecipe.replace('@@', '2.13'))])
        trv = self.addComponent('loadinstalled:source', '1',
                          [('loadinstalled.recipe', loadInstalledRecipe)])
        n,v,f = trv.getNameVersionFlavor()

        db = self.openDatabase()
        source = recipeutil.RemoveHostSource(db, 'rmakehost')
        (loader, recipeClass, localFlags, usedFlags) = \
            recipeutil.loadRecipeClass(repos, n, v, f,
                                       ignoreInstalled=False, 
                                       root=self.cfg.root,
                                       loadInstalledSource=source)
        assert(recipeClass.loadedVersion == '2.13')
コード例 #2
0
ファイル: recipeutiltest.py プロジェクト: pombredanne/rmake
    def testLoadInstalledInRoot(self):
        # make sure that we find this autoconf213 trove even though it's
        # been built.  (RMK-371)
        self.openRepository()
        repos = self.openRmakeRepository()

        sourceV = VFS("/localhost@rpl:1//autoconf213/2.13-1.1")
        binV = sourceV.createShadow(versions.Label("rmakehost@rpl:1"))
        binV.incrementBuildCount()

        loadInstalledRecipe = fixtures.loadInstalledRecipe.replace(
            "loadInstalled('loaded')", "loadInstalled('loaded=:autoconf213')"
        )
        self.addComponent("loaded:runtime", str(binV))
        trv = self.addCollection("loaded", str(binV), [":runtime"])
        self.updatePkg("loaded=rmakehost@rpl:1")
        self.addComponent(
            "loaded:source", str(sourceV), [("loaded.recipe", fixtures.loadedRecipe.replace("@@", "2.13"))]
        )
        trv = self.addComponent("loadinstalled:source", "1", [("loadinstalled.recipe", loadInstalledRecipe)])
        n, v, f = trv.getNameVersionFlavor()

        db = self.openDatabase()
        source = recipeutil.RemoveHostSource(db, "rmakehost")
        (loader, recipeClass, localFlags, usedFlags) = recipeutil.loadRecipeClass(
            repos, n, v, f, ignoreInstalled=False, root=self.cfg.root, loadInstalledSource=source
        )
        assert recipeClass.loadedVersion == "2.13"
コード例 #3
0
    def testLoad2LevelsDeep(self):
        myLoadedRecipe = loadedRecipe.replace('@@', '1')
        myLoadedRecipe = "loadSuperClass('loaded2')\n" + myLoadedRecipe
        loadedSrc = self.addComponent('loaded:source', ':branch/1',
                                      [('loaded.recipe', myLoadedRecipe)])
        self.addComponent('loaded:runtime', ':branch/1')
        loaded = self.addCollection('loaded', ':branch/1', ['loaded:runtime'])

        loaded2 = self.addComponent('loaded2:source', ':branch2/1',
                                    [('loaded2.recipe', loaded2Recipe)])
        loadInstalled = self.addComponent(
            'loadinstalled:source', '1',
            [('loadinstalled.recipe', loadInstalledRecipe)])
        buildCfg = copy.deepcopy(self.buildCfg)
        buildCfg.resolveTroveTups = [[
            loaded.getNameVersionFlavor(),
            loaded2.getNameVersionFlavor()
        ]]
        job = self.newJob(loadInstalled, buildConfig=buildCfg)
        b = builder.Builder(self.rmakeCfg, job)
        b.initializeBuild()
        buildTrove = job.iterTroves().next()
        assert (buildTrove.packages == set(['loadinstalled', 'loaded-1']))
        assert (buildTrove.getLoadedSpecs() == dict(
            loaded=(loadedSrc.getNameVersionFlavor(),
                    dict(loaded2=(loaded2.getNameVersionFlavor(), {})))))
        # make sure that the correct version are loaded using loadRecipeClass
        # normally using loadRecipeClass we'd just load out of the repository
        self.addComponent('loaded:source', '1',
                          [('loaded.recipe', myLoadedRecipe)])
        n, v, f = loadInstalled.getNameVersionFlavor()
        repos = self.openRepository()
        repos = self.openRmakeRepository()
        loader, recipeClass = recipeutil.loadRecipeClass(
            repos, n, v, f, overrides=buildTrove.getLoadedSpecs())[0:2]
        if hasattr(loader, 'getLoadedSpecs'):
            assert (loader.getLoadedSpecs().values()[0][0] ==
                    loadedSrc.getNameVersionFlavor())
        else:
            assert(recipeClass._loadedSpecs.values()[0][0] \
                    == loadedSrc.getNameVersionFlavor())

        # test that again, except for this time, make sure that cook
        # gets the same info - cook would never find these troves
        # without having it passed in from the outside.
        job = self.newJob(loadInstalled, buildConfig=buildCfg)
        b = builder.Builder(self.rmakeCfg, job)
        txt = self.captureOutput(b.build)[1]
        assert (b.job.isBuilt())
        buildTrove = b.job.iterTroves().next()
        builtTroves = repos.getTroves(
            [x for x in buildTrove.getBinaryTroves() if ':' not in x[0]])
        builtTroves = dict((x.getName(), x) for x in builtTroves)
        assert (set(builtTroves['loadinstalled'].getLoadedTroves()) == set(
            [loadedSrc.getNameVersionFlavor(),
             loaded2.getNameVersionFlavor()]))
コード例 #4
0
    def testLoad2LevelsDeep(self):
        myLoadedRecipe = loadedRecipe.replace('@@', '1')
        myLoadedRecipe = "loadSuperClass('loaded2')\n" + myLoadedRecipe
        loadedSrc = self.addComponent('loaded:source', ':branch/1', 
                           [('loaded.recipe', myLoadedRecipe)])
        self.addComponent('loaded:runtime', ':branch/1')
        loaded = self.addCollection('loaded', ':branch/1', ['loaded:runtime'])

        loaded2 = self.addComponent('loaded2:source', ':branch2/1', 
                          [('loaded2.recipe', loaded2Recipe)])
        loadInstalled = self.addComponent('loadinstalled:source', '1',
                            [('loadinstalled.recipe', loadInstalledRecipe)])
        buildCfg = copy.deepcopy(self.buildCfg)
        buildCfg.resolveTroveTups = [[loaded.getNameVersionFlavor(),
                                      loaded2.getNameVersionFlavor()]]
        job = self.newJob(loadInstalled, buildConfig=buildCfg)
        b = builder.Builder(self.rmakeCfg, job)
        b.initializeBuild()
        buildTrove = job.iterTroves().next()
        assert(buildTrove.packages == set(['loadinstalled', 'loaded-1']))
        assert(buildTrove.getLoadedSpecs() ==
                 dict(loaded=(loadedSrc.getNameVersionFlavor(),
                              dict(loaded2=(loaded2.getNameVersionFlavor(),
                                             {})))))
        # make sure that the correct version are loaded using loadRecipeClass
        # normally using loadRecipeClass we'd just load out of the repository
        self.addComponent('loaded:source', '1', 
                          [('loaded.recipe', myLoadedRecipe)])
        n, v, f = loadInstalled.getNameVersionFlavor()
        repos = self.openRepository()
        repos = self.openRmakeRepository()
        loader, recipeClass = recipeutil.loadRecipeClass(repos, n, v, f,
                                   overrides = buildTrove.getLoadedSpecs())[0:2]
        if hasattr(loader, 'getLoadedSpecs'):
            assert(loader.getLoadedSpecs().values()[0][0]
                    == loadedSrc.getNameVersionFlavor())
        else:
            assert(recipeClass._loadedSpecs.values()[0][0] \
                    == loadedSrc.getNameVersionFlavor())

        # test that again, except for this time, make sure that cook
        # gets the same info - cook would never find these troves
        # without having it passed in from the outside.
        job = self.newJob(loadInstalled, buildConfig=buildCfg)
        b = builder.Builder(self.rmakeCfg, job)
        txt = self.captureOutput(b.build)[1]
        assert(b.job.isBuilt())
        buildTrove = b.job.iterTroves().next()
        builtTroves = repos.getTroves([ x for x in buildTrove.getBinaryTroves()
                                        if ':' not in x[0]])
        builtTroves = dict((x.getName(), x) for x in builtTroves)
        assert(set(builtTroves['loadinstalled'].getLoadedTroves()) ==
               set([loadedSrc.getNameVersionFlavor(),
                    loaded2.getNameVersionFlavor()]))
コード例 #5
0
ファイル: cook.py プロジェクト: pombreda/rmake
def _cookTrove(cfg, repos, name, version, flavorList, targetLabel,
               loadSpecsList, csFile, buildReqs, crossReqs,
               failureFd, logger):
    baseFlavor = cfg.buildFlavor
    db = database.Database(cfg.root, cfg.dbPath)
    buildLabel = version.trailingLabel()
    buildBranch = version.branch()
    binaryBranch = version.getBinaryVersion().branch()
    if targetLabel:
        source = recipeutil.RemoveHostSource(db, targetLabel.getHost())
        if version.trailingLabel() == targetLabel and version.depth() > 1:
            buildBranch = version.branch().parentBranch()
            buildLabel = buildBranch.label()
            revision = versions.Revision('1-1')
            binaryBranch = buildBranch.createVersion(revision)\
                                            .getBinaryVersion().branch()
    else:
        source = db
    loaders = []
    recipeClasses = []

    if not isinstance(flavorList, (tuple, list)):
        flavorList = [flavorList]
    if not isinstance(loadSpecsList, (tuple, list)):
        loadSpecsList = [loadSpecsList] * len(flavorList)

    for flavor, loadSpecs in itertools.izip(flavorList, loadSpecsList):
        try:
            logger.debug('Cooking %s=%s[%s] to %s (stored in %s)' % \
                         (name, version, flavor, targetLabel, csFile))
            cfg.buildFlavor = deps.overrideFlavor(baseFlavor, flavor)
            cfg.initializeFlavors()
            (loader, recipeClass, localFlags, usedFlags)  = \
                recipeutil.loadRecipeClass(repos, name, version,
                                           cfg.buildFlavor,
                                           ignoreInstalled=False, root=cfg.root,
                                           loadInstalledSource=source,
                                           overrides=loadSpecs,
                                           cfg=cfg)
            loaders.append(loader)
            recipeClasses.append(recipeClass)
            recipeClass.buildRequirementsOverride = buildReqs
            recipeClass.crossRequirementsOverride = crossReqs
        except Exception, msg:
            errMsg = 'Error loading recipe %s=%s[%s]: %s' % \
                                            (name, version, flavor, str(msg))
            _buildFailed(failureFd, errMsg, traceback.format_exc())
コード例 #6
0
ファイル: cook.py プロジェクト: pombreda/rmake
def _cookTrove(cfg, repos, name, version, flavorList, targetLabel,
               loadSpecsList, csFile, buildReqs, crossReqs, failureFd, logger):
    baseFlavor = cfg.buildFlavor
    db = database.Database(cfg.root, cfg.dbPath)
    buildLabel = version.trailingLabel()
    buildBranch = version.branch()
    binaryBranch = version.getBinaryVersion().branch()
    if targetLabel:
        source = recipeutil.RemoveHostSource(db, targetLabel.getHost())
        if version.trailingLabel() == targetLabel and version.depth() > 1:
            buildBranch = version.branch().parentBranch()
            buildLabel = buildBranch.label()
            revision = versions.Revision('1-1')
            binaryBranch = buildBranch.createVersion(revision)\
                                            .getBinaryVersion().branch()
    else:
        source = db
    loaders = []
    recipeClasses = []

    if not isinstance(flavorList, (tuple, list)):
        flavorList = [flavorList]
    if not isinstance(loadSpecsList, (tuple, list)):
        loadSpecsList = [loadSpecsList] * len(flavorList)

    for flavor, loadSpecs in itertools.izip(flavorList, loadSpecsList):
        try:
            logger.debug('Cooking %s=%s[%s] to %s (stored in %s)' % \
                         (name, version, flavor, targetLabel, csFile))
            cfg.buildFlavor = deps.overrideFlavor(baseFlavor, flavor)
            cfg.initializeFlavors()
            (loader, recipeClass, localFlags, usedFlags)  = \
                recipeutil.loadRecipeClass(repos, name, version,
                                           cfg.buildFlavor,
                                           ignoreInstalled=False, root=cfg.root,
                                           loadInstalledSource=source,
                                           overrides=loadSpecs,
                                           cfg=cfg)
            loaders.append(loader)
            recipeClasses.append(recipeClass)
            recipeClass.buildRequirementsOverride = buildReqs
            recipeClass.crossRequirementsOverride = crossReqs
        except Exception, msg:
            errMsg = 'Error loading recipe %s=%s[%s]: %s' % \
                                            (name, version, flavor, str(msg))
            _buildFailed(failureFd, errMsg, traceback.format_exc())