diff -up yum-3.4.3/yum/drpm.py.orig yum-3.4.3/yum/drpm.py
--- yum-3.4.3/yum/drpm.py.orig 2019-03-27 16:55:57.846748074 +0100
+++ yum-3.4.3/yum/drpm.py 2019-03-27 16:56:28.012138396 +0100
@@ -270,7 +270,11 @@ class DeltaInfo:
# done with drpm file, unlink when local
if po.localpath.startswith(po.repo.pkgdir):
os.unlink(po.localpath)
- po.localpath = po.rpm.localpath # for --downloadonly
+ # rename the rpm if --downloadonly
+ if po.rpm.localpath.endswith('.tmp'):
+ rpmfile = po.rpm.localpath.rsplit('.', 2)[0]
+ os.rename(po.rpm.localpath, rpmfile)
+ po.rpm.localpath = rpmfile
num += 1
# when blocking, one is enough
diff -up yum-3.4.3/yum/__init__.py.orig yum-3.4.3/yum/__init__.py
--- yum-3.4.3/yum/__init__.py.orig 2019-03-27 16:55:58.035750519 +0100
+++ yum-3.4.3/yum/__init__.py 2019-03-27 16:56:28.012138396 +0100
@@ -2435,6 +2435,8 @@ much more problems).
errors = {}
def adderror(po, msg):
errors.setdefault(po, []).append(msg)
+ if po.localpath.endswith('.tmp'):
+ misc.unlink_f(po.localpath) # won't resume this..
# We close the history DB here because some plugins (presto) use
# threads. And sqlite really doesn't like threads. And while I don't
@@ -2546,6 +2548,10 @@ much more problems).
def checkfunc(obj, po=po):
self.verifyPkg(obj, po, 1)
+ if po.localpath.endswith('.tmp'):
+ rpmfile = po.localpath.rsplit('.', 2)[0]
+ os.rename(po.localpath, rpmfile)
+ po.localpath = rpmfile
local_size[0] += po.size
if hasattr(urlgrabber.progress, 'text_meter_total_size'):
urlgrabber.progress.text_meter_total_size(remote_size,
@@ -2584,29 +2590,21 @@ much more problems).
except Errors.RepoError, e:
adderror(po, exception2msg(e))
if async:
- urlgrabber.grabber.parallel_wait()
+ try:
+ urlgrabber.grabber.parallel_wait()
+ except KeyboardInterrupt:
+ for po in remote_pkgs:
+ if po.localpath.endswith('.tmp'):
+ misc.unlink_f(po.localpath)
+ elif isinstance(po, DeltaPackage) and po.rpm.localpath.endswith('.tmp'):
+ misc.unlink_f(po.rpm.localpath)
+ raise
presto.dequeue_all()
presto.wait()
if hasattr(urlgrabber.progress, 'text_meter_total_size'):
urlgrabber.progress.text_meter_total_size(0)
- if downloadonly:
- for po in remote_pkgs:
- if not po.localpath.endswith('.tmp'):
- # file:// repos don't "download"
- continue
- if po in errors:
- # we may throw away partial file here- but we don't lock,
- # so can't rename tempfile to rpmfile safely
- misc.unlink_f(po.localpath)
- else:
- # verifyPkg() didn't complain, so (potentially)
- # overwriting another copy should not be a problem
- rpmfile = po.localpath.rsplit('.', 2)[0]
- os.rename(po.localpath, rpmfile)
- po.localpath = rpmfile
-
fatal = False
for po in errors:
if not isinstance(po, DeltaPackage):