Early free space checking is currently implemented only for rpms
and drpms only, and in two different places.  The repo._getFile()
function has all relevant data, so we can implement it there.

- free space check can be removed from presto.py
- most metadata downloads fail gratefully instead of a traceback
- likely resolves BZ 728848.
---
 cli.py          |    2 +-
 yum/__init__.py |   10 ----------
 yum/yumRepo.py  |   13 +++++++++++++
 3 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/cli.py b/cli.py
index 43c0e1d..bf8be26 100755
--- a/cli.py
+++ b/cli.py
@@ -457,7 +457,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
             try:
                 self._getTs(needTsRemove)
             except yum.Errors.YumBaseError, e:
-                return 1, [str(e)]
+                return 1, [to_utf8(e)]
 
         return self.yum_cli_commands[self.basecmd].doCommand(self, 
self.basecmd, self.extcmds)
 
diff --git a/yum/__init__.py b/yum/__init__.py
index 4f90af4..a20fc87 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1999,16 +1999,6 @@ class YumBase(depsolve.Depsolve):
                     os.unlink(local)
 
             checkfunc = (self.verifyPkg, (po, 1), {})
-            dirstat = os.statvfs(po.repo.pkgdir)
-            if (dirstat.f_bavail * dirstat.f_bsize) <= long(po.size):
-                adderror(po, _('Insufficient space in download directory %s\n'
-                        "    * free   %s\n"
-                        "    * needed %s") %
-                         (po.repo.pkgdir,
-                          format_number(dirstat.f_bavail * dirstat.f_bsize),
-                          format_number(po.size)))
-                continue
-            
             try:
                 if i == 1 and not local_size and remote_size == po.size:
                     text = os.path.basename(po.relativepath)
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
index e5e9ece..767e93e 100644
--- a/yum/yumRepo.py
+++ b/yum/yumRepo.py
@@ -24,6 +24,7 @@ urlparse.uses_fragment.append("media")
 import Errors
 from urlgrabber.grabber import URLGrabber
 from urlgrabber.grabber import default_grabber
+from urlgrabber.progress import format_number
 import urlgrabber.mirror
 from urlgrabber.grabber import URLGrabError
 import repoMDObject
@@ -35,6 +36,7 @@ import sqlitesack
 from yum import config
 from yum import misc
 from yum import comps
+from yum import _
 from constants import *
 import metalink
 
@@ -796,6 +798,16 @@ class YumRepository(Repository, config.RepoConf):
             except Errors.MediaError, e:
                 verbose_logger.log(logginglevels.DEBUG_2, "Error getting 
package from media; falling back to url %s" %(e,))
 
+        if size:
+            dirstat = os.statvfs(os.path.dirname(local))
+            avail = dirstat.f_bavail * dirstat.f_bsize
+            if avail < long(size):
+                raise Errors.RepoError, _('''\
+Insufficient space in download directory %s
+    * free   %s
+    * needed %s'''
+                ) % (os.path.dirname(local), format_number(avail), 
format_number(long(size)))
+
         if url and scheme != "media":
             ugopts = self._default_grabopts(cache=cache)
             ug = URLGrabber(progress_obj = self.callback,
@@ -1454,6 +1466,7 @@ class YumRepository(Repository, config.RepoConf):
         try:
             self._loadRepoXML(text=self)
         except Errors.RepoError, e:
+            logger.error(misc.to_utf8(e))
             msg = ("Cannot retrieve repository metadata (repomd.xml) for 
repository: %s. "
                   "Please verify its path and try again" % self )
             raise Errors.RepoError, msg
-- 
1.7.4.4

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

Reply via email to