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):