It's ok to try downloading rpms when delta rebuild fails,
but when we can't DL a drpm, rpm probably fails, too.
To handle possibly obsolete presto MD, retry anyway..
---
 yum/__init__.py | 18 +++++++++++++++++-
 yum/presto.py   |  9 ++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/yum/__init__.py b/yum/__init__.py
index ae61274..a555b4c 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -2267,7 +2267,7 @@ much more problems).
             self.closeRpmDB()
             self.doUnlock()
 
-        if 1:
+        while True:
             remote_pkgs.sort(mediasort)
             #  This is kind of a hack and does nothing in non-Fedora versions,
             # we'll fix it one way or anther soon.
@@ -2342,6 +2342,22 @@ much more problems).
                         os.rename(po.localpath, rpmfile)
                     po.localpath = rpmfile
                     
+            fatal = False
+            for po in errors:
+                if po not in presto.deltas:
+                    fatal = True; break
+            if not errors or fatal:
+                break
+
+            # there were drpm related errors *only*
+            remote_pkgs = errors.keys()
+            remote_size = 0
+            for po in remote_pkgs:
+                presto.to_rpm(po) # needed, we don't rebuild() when DL fails
+                remote_size += po.size
+            self.verbose_logger.warn(_('Some delta RPMs failed to download or 
rebuild. Retrying..'))
+            presto.deltas.clear() # any error is now considered fatal
+
         if not downloadonly:
             # XXX: Run unlocked?  Skip this for now..
             self.plugins.run('postdownload', pkglist=pkglist, errors=errors)
diff --git a/yum/presto.py b/yum/presto.py
index 08462f5..b990c13 100644
--- a/yum/presto.py
+++ b/yum/presto.py
@@ -119,10 +119,17 @@ class Presto:
         po.returnIdSum = lambda: csum
         return True
 
+    def to_rpm(self, po):
+        if po not in self._rpmsave:
+            return
+        # revert back to RPM
+        po.packagesize, po.relativepath, po.localpath = self._rpmsave.pop(po)
+        del po.returnIdSum
+
     def rebuild(self, po, adderror):
         # restore rpm values
         deltapath = po.localpath
-        po.packagesize, po.relativepath, po.localpath = self._rpmsave[po]
+        po.packagesize, po.relativepath, po.localpath = self._rpmsave.pop(po)
         del po.returnIdSum
 
         # rebuild it from drpm
-- 
1.7.11.7

_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to