Exemplo n.º 1
0
class YumRepoGrinderModified(YumRepoGrinder):

    def fetchYumRepo(self, basepath="./", callback=None, verify_options=None):
        startTime = time.time()
        self.yumFetch = RepoFetch(self.repo_label, repourl=self.repo_url, \
                            cacert=self.sslcacert, clicert=self.sslclientcert, \
                            clikey=self.sslclientkey, mirrorlist=self.mirrors, \
                            download_dir=basepath, proxy_url=self.proxy_url, \
                            proxy_port=self.proxy_port, proxy_user=self.proxy_user, \
                            proxy_pass=self.proxy_pass, sslverify=self.sslverify,
                            max_speed=self.max_speed,
                            verify_options=verify_options)
        self.fetchPkgs = ParallelFetch(self.yumFetch, self.numThreads, callback=callback)
        try:
            if not verify_options:
                verify_options = {"size":False, "checksum":False}
            self.yumFetch.setupRepo()
            # first fetch the metadata
            self.fetchPkgs.processCallback(ProgressReport.DownloadMetadata)
            self.yumFetch.getRepoData()
            if self.stopped:
                return None
            if not self.skip.has_key('packages') or self.skip['packages'] != 1:
                # get rpms to fetch
                self.prepareRPMS()
                # get drpms to fetch
                self.prepareDRPMS()
            else:
                log("Skipping packages preparation from sync process")
            if not self.skip.has_key('distribution') or self.skip['distribution'] != 1:
                # get Trees to fetch
                self.prepareTrees()
            else:
                log("Skipping distribution preparation from sync process")
            # prepare for download
            self.fetchPkgs.addItemList(self.downloadinfo)
            self.fetchPkgs.start()
            report = self.fetchPkgs.waitForFinish()
            self.yumFetch.finalizeMetadata()
            endTime = time.time()
            #log("Processed <%s> items in [%d] seconds" % (len(self.downloadinfo), \
            #      (endTime - startTime)))
            if not self.skip.has_key('packages') or self.skip['packages'] != 1:
                if self.purge_orphaned:
                    #log("Cleaning any orphaned packages..")
                    self.fetchPkgs.processCallback(ProgressReport.PurgeOrphanedPackages)
                    self.purgeOrphanPackages(self.yumFetch.getPackageList(), self.yumFetch.repo_dir)
                if self.remove_old:
                    log("Removing old packages to limit to %s" % self.numOldPackages)
                    self.fetchPkgs.processCallback(ProgressReport.RemoveOldPackages)
                    gutils = GrinderUtils()
                    gutils.runRemoveOldPackages(self.pkgsavepath, self.numOldPackages)
            self.yumFetch.deleteBaseCacheDir()
            #log("Processed <%s> in %s seconds" % (report, endTime - startTime))
            return report, (endTime - startTime)
        finally:
            self.fetchPkgs.stop()
            self.yumFetch.closeRepo()