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

Reply via email to