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