[Yum-devel] [PATCH 2/3] background downloading with --downloadonly
Zdeněk Pavlas
zpavlas at redhat.com
Fri Oct 5 13:50:34 UTC 2012
---
cli.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/cli.py b/cli.py
index 3334e49..3499273 100755
--- a/cli.py
+++ b/cli.py
@@ -42,6 +42,7 @@ from yum import _, P_
from yum.rpmtrans import RPMTransaction
import signal
import yumcommands
+import tempfile
from yum.i18n import to_unicode, to_utf8, exception2msg
@@ -547,6 +548,31 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
msg += _(" aborting.")
raise yum.Errors.YumBaseError(msg)
+ if self.conf.dlonly:
+ tmpdir = {}
+ lockfile = self._lockfile
+ for po in downloadpkgs:
+
+ # create tmpdir
+ pkgdir, fn = po.localpath.rsplit('/', 1)
+ if pkgdir not in tmpdir:
+ tmpdir[pkgdir] = tempfile.mkdtemp(dir=pkgdir)
+
+ # update localpath
+ newpath = tmpdir[pkgdir] +'/'+ fn
+ try: os.rename(po.localpath, newpath)
+ except OSError: pass
+ po.localpath = newpath
+
+ # cache all metadata we'll need
+ po.basepath
+ po.returnChecksums()
+
+ # close DBs, unlock
+ self.repos.close()
+ self.closeRpmDB()
+ self.doUnlock()
+
# confirm with user
if self._promptWanted():
if self.conf.assumeno or not self.userconfirm():
@@ -557,6 +583,25 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
_('Downloading Packages:'))
problems = self.downloadPkgs(downloadpkgs, callback_total=self.download_callback_total_cb)
+ if self.conf.dlonly:
+ self.doLock(lockfile)
+ for po in downloadpkgs:
+
+ # move downloaded files back to pkgdir
+ pkgdir, tmp, fn = po.localpath.rsplit('/', 2)
+ newpath = pkgdir +'/'+ fn
+ if os.path.exists(po.localpath):
+ if os.path.exists(newpath):
+ # conflict: drop our file
+ os.unlink(po.localpath)
+ else:
+ os.rename(po.localpath, newpath)
+ po.localpath = newpath
+
+ # remove temporary directories
+ for tmp in tmpdir.values():
+ os.rmdir(tmp)
+
if len(problems) > 0:
errstring = ''
errstring += _('Error Downloading Packages:\n')
--
1.7.4.4
More information about the Yum-devel
mailing list