[yum-commits] Branch 'yum-3_2_X' - 3 commits - yum/rpmsack.py yum/yumRepo.py

James Antill james at osuosl.org
Thu Oct 15 15:52:52 UTC 2009


 yum/rpmsack.py |   16 ----------------
 yum/yumRepo.py |   57 ++++++++++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 44 insertions(+), 29 deletions(-)

New commits:
commit d3894c291e0631abd87f6e8b19cdb4ba6d7fc18b
Merge: f60d754... 9679b96...
Author: James Antill <james at and.org>
Date:   Thu Oct 15 11:46:37 2009 -0400

    Merge branch 'group-md-downloads' into yum-3_2_X
    
    * group-md-downloads:
      Group MD downloads, and use the length to give total size.

commit f60d7548056d37499e9976e22d81993a2ab3100c
Author: James Antill <james at and.org>
Date:   Thu Oct 15 11:24:10 2009 -0400

    Remove rpmdb version of contains(), the PackageSackBase one is identical

diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 93e14ec..1c7e8f1 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -416,22 +416,6 @@ class RPMDBPackageSack(PackageSackBase):
     def searchNevra(self, name=None, epoch=None, ver=None, rel=None, arch=None):
         return self._search(name, epoch, ver, rel, arch)
 
-    def contains(self, name=None, arch=None, epoch=None, ver=None, rel=None, po=None):
-        """return if there are any packages in the sack that match the given NAEVR 
-           or the NAEVR of the given po"""
-        if po:
-            name = po.name
-            arch = po.arch
-            epoch = po.epoch
-            ver = po.version
-            rel = po.release
-
-        if name and arch and epoch and ver and rel: # cheater lookup
-            if (name, arch, epoch, ver, rel) in self._tup2pkg:
-                return True
-            
-        return bool(self.searchNevra(name=name, arch=arch, epoch=epoch, ver=ver, rel=rel))
-
     def excludeArchs(self, archlist):
         pass
     
commit 9679b96d7e25cc5d5031a17f9deec34c3c441fc3
Author: James Antill <james at and.org>
Date:   Mon Oct 12 17:08:37 2009 -0400

     Group MD downloads, and use the length to give total size.
    
     1. We group all MD that has a size, and report the total size to the
        user. This is more code than you'd think due to some entries not
        having size.
    
     2. We now also check mdpolicy, even if the repomd.xml is the latest
        according to metalink.
    
    ...this is mainly UI atm., but is also one step on the road to doing
    multiple MD downloads at once.

diff --git a/yum/yumRepo.py b/yum/yumRepo.py
index 006f410..e78391a 100644
--- a/yum/yumRepo.py
+++ b/yum/yumRepo.py
@@ -1212,20 +1212,21 @@ class YumRepository(Repository, config.RepoConf):
         else:
             caching = False
             if self._latestRepoXML(local):
-                self._revertOldRepoXML()
-                self.setMetadataCookie()
-                return False
-
-            result = self._getFileRepoXML(local, text)
-            if result is None:
-                # Ignore this as we have a copy
-                self._revertOldRepoXML()
-                return False
+                result = local
+                old_data = self._oldRepoMDData
+                self._repoXML = old_data['old_repo_XML']
+            else:
+                result = self._getFileRepoXML(local, text)
+                if result is None:
+                    # Ignore this as we have a copy
+                    self._revertOldRepoXML()
+                    return False
 
             # if we have a 'fresh' repomd.xml then update the cookie
             self.setMetadataCookie()
 
-        self._repoXML = self._parseRepoXML(result)
+        if self._repoXML is None:
+            self._repoXML = self._parseRepoXML(result)
         if self._repoXML is None:
             self._revertOldRepoXML()
             return False
@@ -1313,6 +1314,8 @@ class YumRepository(Repository, config.RepoConf):
 
         # Inited twice atm. ... sue me
         self._oldRepoMDData['new_MD_files'] = []
+        downloading_with_size = []
+        downloading_no_size   = []
         for mdtype in all_mdtypes:
             (nmdtype, ndata) = self._get_mdtype_data(mdtype)
 
@@ -1340,10 +1343,36 @@ class YumRepository(Repository, config.RepoConf):
             if self._groupCheckDataMDValid(ndata, nmdtype, mdtype):
                 continue
 
+            if ndata.size is None:
+                downloading_no_size.append((ndata, nmdtype))
+            else:
+                downloading_with_size.append((ndata, nmdtype))
+
+        if len(downloading_with_size) == 1:
+            downloading_no_size.update(downloading_with_size)
+            downloading_with_size = []
+
+        remote_size = 0
+        local_size  = 0
+        for (ndata, nmdtype) in downloading_with_size: # Get total size...
+            if ndata.size is None:
+                download_no_size.append((ndata, nmdtype))
+                continue
+            remote_size += int(ndata.size)
+
+        for (ndata, nmdtype) in downloading_with_size:
+            urlgrabber.progress.text_meter_total_size(remote_size, local_size)
+            if not self._retrieveMD(nmdtype, retrieve_can_fail=True):
+                self._revertOldRepoXML()
+                return False
+            local_size += int(ndata.size)
+        urlgrabber.progress.text_meter_total_size(0)
+        for (ndata, nmdtype) in downloading_no_size:
             if not self._retrieveMD(nmdtype, retrieve_can_fail=True):
                 self._revertOldRepoXML()
                 return False
 
+        for (ndata, nmdtype) in downloading_with_size + downloading_no_size:
             local = self._get_mdtype_fname(ndata, False)
             if nmdtype.endswith("_db"): # Uncompress any .sqlite.bz2 files
                 dl_local = local
@@ -1366,8 +1395,7 @@ class YumRepository(Repository, config.RepoConf):
         if self._commonLoadRepoXML(text):
             self._commonRetrieveDataMD(mdtypes)
 
-    def _loadRepoXML(self, text=None):
-        """retrieve/check/read in repomd.xml from the repository"""
+    def _mdpolicy2mdtypes(self):
         md_groups = {'instant'       : [],
                      'group:primary' : ['primary'],
                      'group:small'   : ["primary", "updateinfo"],
@@ -1384,9 +1412,12 @@ class YumRepository(Repository, config.RepoConf):
             mdtypes = None
         else:
             mdtypes = sorted(list(mdtypes))
+        return mdtypes
 
+    def _loadRepoXML(self, text=None):
+        """retrieve/check/read in repomd.xml from the repository"""
         try:
-            return self._groupLoadRepoXML(text, mdtypes)
+            return self._groupLoadRepoXML(text, self._mdpolicy2mdtypes())
         except KeyboardInterrupt:
             self._revertOldRepoXML() # Undo metadata cookie?
             raise


More information about the Yum-commits mailing list