Metadata are downloaded in parallel just before postreposetup.
This implements the reverting behavior.
---
yum/repos.py | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/yum/repos.py b/yum/repos.py
index 3793bad..9679974 100644
--- a/yum/repos.py
+++ b/yum/repos.py
@@ -22,6 +22,7 @@ import misc
import Errors
from packageSack import MetaSack
+import urlgrabber.grabber
from weakref import proxy as weakref
@@ -67,6 +68,30 @@ class RepoStorage:
self._cache_enabled_repos = []
self.quick_enable_disable = {}
+ def retrievAllMD(self):
+ """ Download metadata for all enabled repositories,
+ based on mdpolicy.
+ """
+
+ if not hasattr(urlgrabber.grabber, 'parallel_wait'):
+ return
+ repos = []
+ for repo in self.listEnabled():
+ if repo.async and repo._commonLoadRepoXML(repo):
+ mdtypes = repo._mdpolicy2mdtypes()
+ downloading = repo._commonRetrieveDataMD_list(mdtypes)
+ repos.append([repo, downloading, False])
+ def failfunc(obj, r=repos[-1]):
+ r[2] = True
+ for (ndata, nmdtype) in downloading:
+ repo._retrieveMD(nmdtype, async=True, failfunc=failfunc)
+ urlgrabber.grabber.parallel_wait()
+ for repo, downloading, error in repos:
+ if error: # some MD failed?
+ repo._revertOldRepoXML()
+ else:
+ repo._commonRetrieveDataMD_done(downloading)
+
def doSetup(self, thisrepo = None):
self.ayum.plugins.run('prereposetup')
@@ -89,6 +114,7 @@ class RepoStorage:
self.disableRepo(repo.id)
self._setup = True
+ self.retrievAllMD()
self.ayum.plugins.run('postreposetup')
def __str__(self):
--
1.7.4.4
_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel