def _getMetaFile(self, repoMdObj, metaName, fileName): if not repoMdObj.repoMdDatas.has_key(metaName): return False metaObj = repoMdObj.repoMdDatas[metaName] destTmpFile = self._getRepoDataDir() + '/' + \ metaObj.locationHref.split('/')[-1] metaUrl = self.repoConfig.baseurl + '/' + metaObj.locationHref # uncompressTmpFile = '.'.join(destTmpFile.split('.')[:-1]) + '.tmp' uncompressTmpFile = self._getRepoDataDir() + '/' + \ fileName + '.tmp' if not file_util.remove(destTmpFile) or\ not file_util.remove(uncompressTmpFile): return False if not self.fileFetcher.fetch(metaUrl, destTmpFile) or\ not file_util.chmod(destTmpFile, 0666): return False try: if destTmpFile.split('.')[-1] == 'bz2': f = bz2.BZ2File(destTmpFile) else: f = gzip.open(destTmpFile) if not file_util.writeToFile(uncompressTmpFile, f.read()) or\ not file_util.chmod(uncompressTmpFile, 0666): f.close() return False f.close() except Exception: Log.cout(Log.ERROR, 'decompress %s failed' % destTmpFile) return False return self._checkSumValid(metaObj, uncompressTmpFile)
def getPackage(self, pkg): if self._getRepoDataDir() is None: return None pkgCacheDir = self._getRepoDataDir() + self.packageCacheDir preUmask = os.umask(0) if not file_util.makeDir(pkgCacheDir): os.umask(preUmask) Log.cout(Log.ERROR, 'Make cache dir [%s] failed' % pkgCacheDir) return None os.umask(preUmask) uri = pkg.getLocation() if not uri.lower().startswith('http'): return None pkgFilePath = pkgCacheDir + os.path.basename(uri) if file_util.exists(pkgFilePath): ctime = os.stat(pkgFilePath).st_ctime nowtime = time.time() if nowtime - ctime < self.expireTime: Log.cout(Log.DEBUG, "Get package [%s] from cache" % pkg) return pkgFilePath if not file_util.remove(pkgFilePath): Log.cout(Log.DEBUG, "Remove old package [%s] because of expired" % pkg) return None if not self.fileFetcher.fetch(uri, pkgFilePath) or \ not file_util.chmod(pkgFilePath, 0666): return None return pkgFilePath
def _onMakeCacheSuccess(self, cacheType): cachecookie = self._getRepoDataDir() + '/' + 'cachecookie'; if not file_util.remove(cachecookie) or\ not file_util.writeToFile(cachecookie, '') or\ not file_util.chmod(cachecookie, 0666): Log.cout(Log.ERROR, 'Re-touch cachecookie failed') return False repomdTmpFile = self._getRepoDataDir() + '/' + \ self.repomdLocation.split('/')[-1]; if not file_util.rename(repomdTmpFile + '.tmp', repomdTmpFile): return False return self._processTmpFile(cacheType, True)
def _doMakeCache(self, metatype): #download repomd.xml to repomd.xml.tmp repomdTmpFile = self._getRepoDataDir() + '/' + \ self.repomdLocation.split('/')[-1] + ".tmp" repomdUrl = self.repoConfig.baseurl + self.repomdLocation if not file_util.remove(repomdTmpFile) or \ not self.fileFetcher.fetch(repomdUrl, repomdTmpFile) or\ not file_util.chmod(repomdTmpFile, 0666): return False repoMdObj = RepoMdParser().parse(repomdTmpFile) if not repoMdObj: return False metatype = self._filterMetaTypeByRepoMD(metatype, repoMdObj) if metatype == PRIMARY_TYPE: return self._getMetaFile(repoMdObj, PRIMARY_NAME, PRIMARY_FILE) elif metatype == PRIMARYDB_TYPE: return self._getMetaFile(repoMdObj, PRIMARYDB_NAME, PRIMARYDB_FILE) elif metatype == ALL_TYPE: return self._getMetaFile(repoMdObj, PRIMARY_NAME, PRIMARY_FILE) and \ self._getMetaFile(repoMdObj, PRIMARYDB_NAME, PRIMARYDB_FILE) else: return False