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