Beispiel #1
0
    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)
Beispiel #2
0
 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
Beispiel #3
0
 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)
Beispiel #4
0
 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