示例#1
0
 def testRebuild(self):
     self.addComponent('foo:source')
     self.addComponent('bar:source')
     self.buildCfg.configLine('[x86]')
     helper = self.getRmakeHelper()
     job = buildcmd.getBuildJob(self.buildCfg,
                                helper.getConaryClient(), ['foo'],
                                rebuild=True)
     assert (not job.getMainConfig().prebuiltBinaries)
     self.addComponent('foo:runtime')
     self.addCollection('foo', [':runtime'])
     self.addComponent('bar:runtime')
     self.addCollection('bar', [':runtime'])
     self.addComponent('bar:runtime[is:x86_64]')
     self.addCollection('bar[is:x86_64]', [':runtime'])
     job = helper.createBuildJob(['foo', 'bar{x86}'], rebuild=True)
     assert (sorted([x[0] for x in job.getMainConfig().prebuiltBinaries
                     ]) == ['bar', 'bar', 'foo'])
示例#2
0
 def testRebuild(self):
     self.addComponent('foo:source')
     self.addComponent('bar:source')
     self.buildCfg.configLine('[x86]')
     helper = self.getRmakeHelper()
     job = buildcmd.getBuildJob(self.buildCfg,
                       helper.getConaryClient(),
                       ['foo'],
                       rebuild=True)
     assert(not job.getMainConfig().prebuiltBinaries)
     self.addComponent('foo:runtime')
     self.addCollection('foo', [':runtime'])
     self.addComponent('bar:runtime')
     self.addCollection('bar', [':runtime'])
     self.addComponent('bar:runtime[is:x86_64]')
     self.addCollection('bar[is:x86_64]', [':runtime'])
     job = helper.createBuildJob(['foo', 'bar{x86}'],
                       rebuild=True)
     assert(sorted([x[0] for x in job.getMainConfig().prebuiltBinaries]) == ['bar', 'bar', 'foo'])
示例#3
0
def _buildJob(self, buildConfig, buildTroveSpecs, builtMapping):
    client = conaryclient.ConaryClient(buildConfig)
    job = buildcmd.getBuildJob(buildConfig, client, buildTroveSpecs)
    db = self.openRmakeDatabase()
    db.addJob(job)
    db.subscribeToJob(job)
    loadResults = recipeutil.getSourceTrovesFromJob(job,
                                                    repos=client.getRepos())
    for trove in job.iterLoadableTroves():
        result = loadResults.get(trove.getNameVersionFlavor(True), None)
        if result:
            trove.troveLoaded(result)
    job.setBuildTroves(list(job.iterTroves()))
    for buildTrove in job.iterTroves():
        binaries = builtMapping.get(buildTrove.getName().split(':')[0], None)
        if isinstance(binaries, dict):
            binaries = binaries.get(buildTrove.getContext(), None)
        if binaries:
            buildTrove.troveBuilt([x.getNameVersionFlavor() for x in binaries])
        else:
            buildTrove.troveFailed('Failure')
    job.jobPassed('passed')
    return job
示例#4
0
def _buildJob(self, buildConfig, buildTroveSpecs, builtMapping):
    client = conaryclient.ConaryClient(buildConfig)
    job = buildcmd.getBuildJob(buildConfig, client, buildTroveSpecs)
    db = self.openRmakeDatabase()
    db.addJob(job)
    db.subscribeToJob(job)
    loadResults = recipeutil.getSourceTrovesFromJob(job,
        repos=client.getRepos())
    for trove in job.iterLoadableTroves():
        result = loadResults.get(trove.getNameVersionFlavor(True), None)
        if result:
            trove.troveLoaded(result)
    job.setBuildTroves(list(job.iterTroves()))
    for buildTrove in job.iterTroves():
        binaries =  builtMapping.get(buildTrove.getName().split(':')[0], None)
        if isinstance(binaries, dict):
            binaries = binaries.get(buildTrove.getContext(), None)
        if binaries:
            buildTrove.troveBuilt([x.getNameVersionFlavor() for x in binaries])
        else:
            buildTrove.troveFailed('Failure')
    job.jobPassed('passed')
    return job
示例#5
0
    def _createBuildJob(self, troveSpecList, limitToHosts=None,
                        limitToLabels=None, recurseGroups=False,
                        buildConfig=None, configDict=None, matchSpecs=None,
                        oldTroveDict=None, updateSpecs=None,
                        rebuild=False):
        if not isinstance(troveSpecList, (list, tuple)):
            troveSpecList = [troveSpecList]
        if configDict:
            buildConfig = configDict['']
        else:
            if buildConfig is None:
                buildConfig = self.buildConfig
            if not recurseGroups:
                # only use default match rules when recursing.
                buildConfig.clearMatchRules()
        if limitToHosts:
            buildConfig.limitToHosts(limitToHosts)
        if limitToLabels:
            buildConfig.limitToLabels(limitToLabels)
        if matchSpecs:
            for matchSpec in matchSpecs:
                buildConfig.addMatchRule(matchSpec)
        self.updateBuildConfig(buildConfig=buildConfig)
        conaryClient = self.getConaryClient(buildConfig)

        job = buildcmd.getBuildJob(buildConfig,
                                   conaryClient,
                                   troveSpecList,
                                   recurseGroups=recurseGroups,
                                   configDict=configDict,
                                   updateSpecs=updateSpecs,
                                   oldTroveDict=oldTroveDict,
                                   rebuild=rebuild)
        conaryClient.close()
        conaryClient.db.close()
        return job
示例#6
0
    def _createBuildJob(self, troveSpecList, limitToHosts=None,
                        limitToLabels=None, recurseGroups=False,
                        buildConfig=None, configDict=None, matchSpecs=None,
                        oldTroveDict=None, updateSpecs=None,
                        rebuild=False):
        if not isinstance(troveSpecList, (list, tuple)):
            troveSpecList = [troveSpecList]
        if configDict:
            buildConfig = configDict['']
        else:
            if buildConfig is None:
                buildConfig = self.buildConfig
            if not recurseGroups:
                # only use default match rules when recursing.
                buildConfig.clearMatchRules()
        if limitToHosts:
            buildConfig.limitToHosts(limitToHosts)
        if limitToLabels:
            buildConfig.limitToLabels(limitToLabels)
        if matchSpecs:
            for matchSpec in matchSpecs:
                buildConfig.addMatchRule(matchSpec)
        self.updateBuildConfig(buildConfig=buildConfig)
        conaryClient = self.getConaryClient(buildConfig)

        job = buildcmd.getBuildJob(buildConfig,
                                   conaryClient,
                                   troveSpecList,
                                   recurseGroups=recurseGroups,
                                   configDict=configDict,
                                   updateSpecs=updateSpecs,
                                   oldTroveDict=oldTroveDict,
                                   rebuild=rebuild)
        conaryClient.close()
        conaryClient.db.close()
        return job
示例#7
0
 def testCookSourceGroup(self):
     self.openRepository()
     repos = self.openRepository(1)
     trv0 = self.addComponent('test0:source', '1').getNameVersionFlavor()
     trv1 = self.addComponent('test:source', '1').getNameVersionFlavor()
     trv2 = self.addComponent('test2:source', '1').getNameVersionFlavor()
     trv5 = self.addComponent('test5:source', '1').getNameVersionFlavor()
     self.addComponent('test4:source',
                       '/localhost1@rpl:linux/1-1').getNameVersionFlavor()
     self.addComponent('group-foo:source', '1',
                       [('group-foo.recipe', groupRecipe),
                        ('preupdate.sh', '#!/bin/sh\necho "hello"\n')])
     self.openRmakeRepository()
     helper = self.getRmakeHelper()
     self.buildCfg.limitToHosts('localhost')
     self.buildCfg.addMatchRule('-group-foo')
     job = buildcmd.getBuildJob(
         self.buildCfg,
         helper.getConaryClient(), ['group-foo[ssl]', 'group-foo[!ssl]'],
         recurseGroups=buildcmd.BUILD_RECURSE_GROUPS_SOURCE)
     trvs = set(job.iterTroveList())
     assert (trvs == set([(trv0[0], trv0[1], deps.parseFlavor('')),
                          (trv1[0], trv1[1], deps.parseFlavor('ssl')),
                          (trv2[0], trv2[1], deps.parseFlavor('readline')),
                          (trv5[0], trv5[1], deps.parseFlavor(''))]))
     helper = self.getRmakeHelper()
     db = self.openRmakeDatabase()
     db.addJob(job)
     jobId = job.jobId
     job = helper.createRestartJob(jobId)
     os.chdir(self.workDir)
     self.checkout('group-foo')
     os.chdir('group-foo')
     self.writeFile('group-foo.recipe', groupRecipe + '#\n')  # change
     self.buildCfg.matchTroveRule = []
     self.buildCfg.limitToLabels('localhost@rpl:linux')
     self.buildCfg.addMatchRule('-group-foo')
     self.buildCfg.addMatchRule('-[readline]')
     trvs = buildcmd.getTrovesToBuild(
         self.buildCfg,
         helper.getConaryClient(),
         ['group-foo.recipe[ssl]', 'group-foo.recipe[!ssl]'],
         recurseGroups=buildcmd.BUILD_RECURSE_GROUPS_SOURCE,
         matchSpecs=self.buildCfg.matchTroveRule)
     trvs = set(trvs)
     assert (trvs == set([(trv0[0], trv0[1], deps.parseFlavor('')),
                          (trv1[0], trv1[1], deps.parseFlavor('ssl')),
                          (trv5[0], trv5[1], deps.parseFlavor(''))]))
     # Build the actual group, and this time let's do a fresh commit
     # instead of a shadow + commit.
     os.remove('CONARY')
     self.buildCfg.matchTroveRule = []
     trvs = buildcmd.getTrovesToBuild(
         self.buildCfg,
         helper.getConaryClient(),
         ['group-foo.recipe[ssl]', 'group-foo.recipe[!ssl]'],
         recurseGroups=buildcmd.BUILD_RECURSE_GROUPS_NONE,
         matchSpecs=self.buildCfg.matchTroveRule)
     trvs = set(trvs)
     assert (len(trvs) == 2)
     assert ([x[0]
              for x in trvs] == ['group-foo:source', 'group-foo:source'])
示例#8
0
 def testCookSourceGroup(self):
     self.openRepository()
     repos = self.openRepository(1)
     trv0 = self.addComponent('test0:source', '1').getNameVersionFlavor()
     trv1 = self.addComponent('test:source', '1').getNameVersionFlavor()
     trv2 = self.addComponent('test2:source', '1').getNameVersionFlavor()
     trv5 = self.addComponent('test5:source', '1').getNameVersionFlavor()
     self.addComponent('test4:source', 
                        '/localhost1@rpl:linux/1-1').getNameVersionFlavor()
     self.addComponent('group-foo:source', '1',
                       [('group-foo.recipe', groupRecipe),
                         ('preupdate.sh', '#!/bin/sh\necho "hello"\n')])
     self.openRmakeRepository()
     helper = self.getRmakeHelper()
     self.buildCfg.limitToHosts('localhost')
     self.buildCfg.addMatchRule('-group-foo')
     job = buildcmd.getBuildJob(self.buildCfg,
                       helper.getConaryClient(),
                       ['group-foo[ssl]',
                        'group-foo[!ssl]'],
                       recurseGroups=buildcmd.BUILD_RECURSE_GROUPS_SOURCE)
     trvs = set(job.iterTroveList())
     assert(trvs == set([(trv0[0], trv0[1], deps.parseFlavor('')),
                         (trv1[0], trv1[1], deps.parseFlavor('ssl')),
                         (trv2[0], trv2[1], deps.parseFlavor('readline')),
                         (trv5[0], trv5[1], deps.parseFlavor(''))]))
     helper = self.getRmakeHelper()
     db = self.openRmakeDatabase()
     db.addJob(job)
     jobId = job.jobId
     job = helper.createRestartJob(jobId)
     os.chdir(self.workDir)
     self.checkout('group-foo')
     os.chdir('group-foo')
     self.writeFile('group-foo.recipe', groupRecipe + '#\n') # change
     self.buildCfg.matchTroveRule = []
     self.buildCfg.limitToLabels('localhost@rpl:linux')
     self.buildCfg.addMatchRule('-group-foo')
     self.buildCfg.addMatchRule('-[readline]')
     trvs = buildcmd.getTrovesToBuild(
                       self.buildCfg, helper.getConaryClient(),
                       ['group-foo.recipe[ssl]',
                        'group-foo.recipe[!ssl]'],
                       recurseGroups=buildcmd.BUILD_RECURSE_GROUPS_SOURCE,
                       matchSpecs=self.buildCfg.matchTroveRule)
     trvs = set(trvs)
     assert(trvs == set([(trv0[0], trv0[1], deps.parseFlavor('')),
                         (trv1[0], trv1[1], deps.parseFlavor('ssl')),
                         (trv5[0], trv5[1], deps.parseFlavor(''))]))
     # Build the actual group, and this time let's do a fresh commit
     # instead of a shadow + commit.
     os.remove('CONARY')
     self.buildCfg.matchTroveRule = []
     trvs = buildcmd.getTrovesToBuild(
                       self.buildCfg, helper.getConaryClient(),
                       ['group-foo.recipe[ssl]',
                        'group-foo.recipe[!ssl]'],
                       recurseGroups=buildcmd.BUILD_RECURSE_GROUPS_NONE,
                       matchSpecs=self.buildCfg.matchTroveRule)
     trvs = set(trvs)
     assert(len(trvs) == 2)
     assert([x[0] for x in trvs] == ['group-foo:source', 'group-foo:source'])