diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-06-17 15:35:29 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-06-17 15:35:29 -0700 |
commit | d3d1aee93c9c5f04612c9237d452e9885c10af6d (patch) | |
tree | ace793b6fd49e0c210f3a3fc717071a24fae1368 | |
parent | cbe44d92ff13b8a22f5b4215b73078ce600c6bf4 (diff) | |
download | portage-d3d1aee93c9c5f04612c9237d452e9885c10af6d.tar.gz portage-d3d1aee93c9c5f04612c9237d452e9885c10af6d.tar.bz2 portage-d3d1aee93c9c5f04612c9237d452e9885c10af6d.zip |
repoman: handle PermissionDenied from digestgen
This will fix bug #371987.
-rwxr-xr-x | bin/repoman | 9 | ||||
-rw-r--r-- | pym/portage/checksum.py | 15 |
2 files changed, 20 insertions, 4 deletions
diff --git a/bin/repoman b/bin/repoman index 164a1278d..487cc67a4 100755 --- a/bin/repoman +++ b/bin/repoman @@ -1095,8 +1095,13 @@ for x in scanlist: portage._doebuild_manifest_exempt_depend -= 1 repoman_settings["O"] = checkdir - generated_manifest = digestgen( - mysettings=repoman_settings, myportdb=portdb) + try: + generated_manifest = digestgen( + mysettings=repoman_settings, myportdb=portdb) + except portage.exception.PermissionDenied as e: + generated_manifest = False + writemsg_level("!!! Permission denied: '%s'\n" % (e,), + level=logging.ERROR, noiselevel=-1) if not generated_manifest: print("Unable to generate manifest.") diff --git a/pym/portage/checksum.py b/pym/portage/checksum.py index f640fd9f1..eeb5995bb 100644 --- a/pym/portage/checksum.py +++ b/pym/portage/checksum.py @@ -29,8 +29,19 @@ def _generate_hash_function(hashtype, hashobject, origin="unknown"): @type filename: String @return: The hash and size of the data """ - f = open(_unicode_encode(filename, - encoding=_encodings['fs'], errors='strict'), 'rb') + try: + f = open(_unicode_encode(filename, + encoding=_encodings['fs'], errors='strict'), 'rb') + except IOError as e: + func_call = "open('%s')" % filename + if e.errno == errno.EPERM: + raise portage.exception.OperationNotPermitted(func_call) + elif e.errno == errno.EACCES: + raise portage.exception.PermissionDenied(func_call) + elif e.errno == errno.ENOENT: + raise portage.exception.FileNotFound(filename) + else: + raise blocksize = HASHING_BLOCKSIZE data = f.read(blocksize) size = 0 |