def createHostToolAppList(self, host, srcDir, destDir): #{{{ rpmDict = self.getRpmsForMerged(self.MergedID) if host == 'cluster': print "Host is defined here as cluster. Skipping. Copy may be incomplete, please check." return [] sourceList = rpmDict['host-tool']['src'] for rpm in sourceList: try: safecopy(srcDir + '/SRPMS/' + rpm, destDir + '/SRPMS') except IOError: pass return rpmDict['host-tool'][host]
def createTargetAppList(self, archID, srcDir, destDir): #{{{ archName = self._db.Command( "SELECT name FROM BuildCfg.archs WHERE id=%s" % archID)[0]['name'] rpmDict = self.getRpmsForMerged(self.MergedID) sourceList = rpmDict['target']['src'] for rpm in sourceList: try: safecopy(srcDir + "/SRPMS/" + rpm, destDir + "/SRPMS") except IOError: #test pass try: return rpmDict['target'][archName] except KeyError: print "Arch %s is released for this product but not in the db." % archName logErr("Arch %s is released for this product but not in the db." % archName) return []
def processSrcRPMS(self, releaseRequestID, srcDir, destDir): #{{{ '''Moves all the source RPMS for a release request.''' results = self._db.Command( "SELECT name FROM release_request WHERE id=%s" % releaseRequestID) results = results[0]['name'] if '-src' in results: rpmList = self._createSrcRPMList(releaseRequestID) for rpm in rpmList: safecopy(srcDir + "/SRPMS/" + rpm, destDir + "/SRPMS") logInfo( "executing processSrcRPMS. Source update true, releaseRequestID: %s" % releaseRequestID) return True else: logInfo( "executing processSrcRPMS. Source update false, releaseRequestID: %s" % releaseRequestID) return False
def createCrossAppList(self, hostID, archID, srcDir, destDir): #{{{ hostName = self._db.Command( "SELECT name FROM BuildCfg.hosts WHERE id=%s" % hostID)[0]['name'] archName = self._db.Command( "SELECT name FROM BuildCfg.archs WHERE id=%s" % archID)[0]['name'] rpmDict = self.getRpmsForMerged(self.MergedID) sourceList = rpmDict['cross']['src']['src'] for rpm in sourceList: try: safecopy(srcDir + "/SRPMS/" + rpm, destDir + "/SRPMS") except IOError: pass try: return rpmDict['cross'][archName][hostName] except KeyError: print "Arch %s Host %s copy failed." % (archName, hostName) return []
def updateZone(self, releaseRequestID): #{{{ self.setProductID(releaseRequestID) patchDir = self.getDestDir() if DEBUG: patchDir = '/home/rell' + patchDir updateDirName = self.getPackageName() + '-' + str( self.getHighestBugID()) + '-' + str( self.getBuildID(releaseRequestID)) print os.path.join(patchDir, updateDirName) if os.path.exists(os.path.join(patchDir, updateDirName)): patchDir = os.path.join(patchDir, updateDirName) else: patchDir = '/tmp/' + self.getPackageName() + '-' + str( self.getHighestBugID()) + '-' + str( self.getBuildID(releaseRequestID)) self.extractRpms(releaseRequestID, '/tmp') if DEBUG: patchDir = '/home/rell' + patchDir destDir = '/home/rell/mvista/ftp/arch' else: destDir = '/mvista/ftp/arch' updateDirName = self.getZoneDirName(releaseRequestID) zoneDirs = self.getZoneDirs() for dir in zoneDirs: for arch in self.getZoneArchs(dir['id']): safecopy( os.path.join(patchDir, arch), os.path.join(destDir, dir['name'], 'updates', updateDirName, arch)) logInfo('Processing arch %s (zone)' % arch) for host in self.getZoneHosts(dir['id']): safecopy( os.path.join(patchDir, 'host', host), os.path.join(destDir, dir['name'], 'updates', updateDirName, 'host', host)) logInfo('Processing host %s (zone)' % host) safecopy( os.path.join(patchDir, 'SRPMS'), os.path.join(destDir, dir['name'], 'updates', updateDirName, 'SRPMS')) logInfo('Processing SRPM %s (zone)' % updateDirName)
def extractRpms(self, releaseRequestID, destPath=None): #{{{ ''' Moves the files needed for this release request into the update directory. Dirs are populated as follows: target: /update path/app path/$arch/target (for all archs) cross: /update path/app path/$arch/cross/$host (for all archs,hosts) host: /update path/app path/host/$host (for all hosts) host-tools: /update path/app path/host-tools/$host (for all hosts) common: /update path/app path/host/common ''' logInfo("In extractRPMs. Initialization steps..") self.setProductID(releaseRequestID) packageType = self.getPackageType(releaseRequestID) srcDir = self.getBuildDir(releaseRequestID) if not destPath: destDir = self.getDestDir() else: destDir = destPath #print "%s to %s" % (srcDir, destDir) if DEBUG: destDir = '/home/rell' + destDir destDir += '/' + self.getPackageName() + '-' + str( self.getHighestBugID()) + '-' + str( self.getBuildID(releaseRequestID)) #Make the SRPM directory regardless of the package type. if not os.path.exists(os.path.join(destDir, "SRPMS")): os.makedirs(os.path.join(destDir, "SRPMS")) if packageType == 'target': logInfo("processing target package.") #If this release request represents source rpms, copy them and finish. #if self.processSrcRPMS(releaseRequestID, srcDir, destDir): # return archList = self.getAllArchs() for arch in archList: logInfo("processing arch %s" % arch) targetDir = os.path.join(destDir, arch, "target") archID = self.getArchID(arch) appList = self.createTargetAppList(archID, srcDir, destDir) for app in appList: logInfo("processing app %s" % app) if not os.path.exists(targetDir): os.makedirs(targetDir) if DEBUG: pass print "processing target app %s" % app if os.path.exists(os.path.join(srcDir, arch, "target", app)): safecopy(os.path.join(srcDir, arch, "target", app), targetDir) elif os.path.exists( os.path.join(srcDir, arch, "target", "optional", app)): if not os.path.exists( os.path.join(targetDir, "optional")): os.makedirs(os.path.join(targetDir, "optional")) safecopy( os.path.join(srcDir, arch, "target", "optional", app), os.path.join(targetDir, "optional")) else: raise Exception, "This target app does not exist. Something is wrong. Aborting. \n %s" % os.path.join( srcDir, arch, "target", app) elif packageType == 'host': logInfo("processing host package.") hostList = self.getHosts() for host in hostList: logInfo("processing host %s" % host) appList = self.createHostAppList(host, srcDir, destDir) for app in appList: logInfo("processing app %s" % app) if not os.path.exists(os.path.join(destDir, "host", host)): os.makedirs(os.path.join(destDir, "host", host)) if DEBUG: print "processing host app %s" % app safecopy(os.path.join(srcDir,"host",host,app) , \ os.path.join(destDir,"host",host)) elif packageType == 'host-tool': logInfo("processing host-tool package.") hostList = self.getHosts() for host in hostList: logInfo("processing host %s" % host) appList = self.createHostToolAppList(host, srcDir, destDir) for app in appList: logInfo("processing app %s" % app) if not os.path.exists( os.path.join(destDir, "host-tools", host)): os.makedirs(os.path.join(destDir, "host-tools", host)) if DEBUG: print "processing host-tool app %s" % app safecopy(os.path.join(srcDir,"host-tools",host,app) , \ os.path.join(destDir,"host-tools",host)) elif packageType == 'cross': logInfo("processing cross package.") #if self.processSrcRPMS(releaseRequestID, srcDir, destDir): # return for host in self.getHosts(): for arch in self.getAllArchs(): logInfo("processing host-arch pair %s/%s" % (host, arch)) appList = self.createCrossAppList(self.getHostID(host), self.getArchID(arch), srcDir, destDir) for app in appList: logInfo("processing app %s" % app) if not os.path.exists( os.path.join(destDir, arch, "cross", host)): os.makedirs( os.path.join(destDir, arch, "cross", host)) if DEBUG: print "processing cross app %s" % app safecopy(os.path.join(srcDir,arch,"cross",host,app) , \ os.path.join(destDir,arch,"cross",host) ) elif packageType == 'cross-common': logInfo("processing cross noarch package.") #if self.processSrcRPMS(releaseRequestID, srcDir, destDir): # if DEBUG: #print "Processing Source RPMs." #return for arch in self.getAllArchs(): logInfo("processing arch %s" % arch) appList = self.createAppList(releaseRequestID, archString=arch) for app in appList: logInfo("processing app %s" % app) if not os.path.exists( os.path.join(destDir, arch, "cross", "common")): os.makedirs( os.path.join(destDir, arch, "cross", "common")) if DEBUG: print "processing cross-common app %s" % app safecopy(os.path.join( srcDir,arch,"cross","common",app) , \ os.path.join( destDir,arch,"cross","common" )) # elif packageType == 'host-tool': # for host in self.getHosts(): # pass#returnList.append(destDir + "/host-tools/" + host) else: raise Exception, "Package type mismatch. Contact [email protected] with the ID of this request."