---
 cli.py      |   28 +++++++++++++++++++++++++++-
 yum/misc.py |   10 ++++++++++
 2 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/cli.py b/cli.py
index 3499273..28d520f 100755
--- a/cli.py
+++ b/cli.py
@@ -42,7 +42,7 @@ from yum import _, P_
 from yum.rpmtrans import RPMTransaction
 import signal
 import yumcommands
-import tempfile
+import tempfile, shutil
 
 from yum.i18n import to_unicode, to_utf8, exception2msg
 
@@ -568,6 +568,29 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
                 po.basepath
                 po.returnChecksums()
 
+            # downloadPkgs() will run predownload hooks without yum lock, so 
plugins may break.
+            # This is a presto-specific hack. We'll probably have to merge it 
to core anyway.
+            moved = []
+            presto, conf = self.plugins._plugins.get('presto') or (None, None)
+            if conf and conf.getboolean('main', 'enabled'):
+                repos = {}
+                for po in downloadpkgs:
+                    if po.state == yum.constants.TS_UPDATE:
+                        repos[po.repo] = repos.get(po.repo, 0) + po.size
+                for repo in repos:
+                    try: md = repo.repoXML.getData('prestodelta')
+                    except yum.Errors.YumRepoMDError: continue
+                    if int(md.size) > repos[repo]:
+                        continue
+
+                    # Presto may use this repository- move it.
+                    old = repo.cachedir
+                    new = tempfile.mkdtemp(dir=old)
+                    fn = repo._retrieveMD('prestodelta')
+                    os.link(fn, new +'/'+ os.path.basename(fn))
+                    repo._dir_setup_cachedir = new
+                    moved.append((repo, old, new))
+
             # close DBs, unlock
             self.repos.close()
             self.closeRpmDB()
@@ -601,6 +624,9 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
             # remove temporary directories
             for tmp in tmpdir.values():
                 os.rmdir(tmp)
+            for repo, old, new in moved:
+                yum.misc.rmdir_f(new)
+                repo._dir_setup_cachedir = old
 
         if len(problems) > 0:
             errstring = ''
diff --git a/yum/misc.py b/yum/misc.py
index 0fd3e90..8d23770 100644
--- a/yum/misc.py
+++ b/yum/misc.py
@@ -1208,3 +1208,13 @@ def cElementTree_xmlparse(filename):
     """ Lazily load/run: cElementTree.parse """
     _cElementTree_import()
     return __cached_cElementTree.parse(filename)
+
+def rmdir_f(path):
+    """ rm -rf path """
+    for fn in os.listdir(path):
+        fn = path +'/'+ fn
+        if os.path.isdir(fn):
+            rmdir_f(fn)
+        else:
+            os.unlink(fn)
+    os.rmdir(path)
-- 
1.7.4.4

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

Reply via email to