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'])
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'])
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
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
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'])
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'])