summaryrefslogtreecommitdiffstats
path: root/pym/portage_util.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-07-09 20:18:59 +0000
committerZac Medico <zmedico@gentoo.org>2006-07-09 20:18:59 +0000
commit5cd6e36273f2d5674aa47970eb1207de3ac3bc4a (patch)
tree9e60f5321a86d496b9102d0a93650507bb7a75b3 /pym/portage_util.py
parent31cd6692727c6020793346e9579299355e56d268 (diff)
downloadportage-5cd6e36273f2d5674aa47970eb1207de3ac3bc4a.tar.gz
portage-5cd6e36273f2d5674aa47970eb1207de3ac3bc4a.tar.bz2
portage-5cd6e36273f2d5674aa47970eb1207de3ac3bc4a.zip
Wrap common write_atomic exceptions for easier error handling.
svn path=/main/trunk/; revision=3822
Diffstat (limited to 'pym/portage_util.py')
-rw-r--r--pym/portage_util.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/pym/portage_util.py b/pym/portage_util.py
index a8f396c51..79babe05c 100644
--- a/pym/portage_util.py
+++ b/pym/portage_util.py
@@ -707,13 +707,25 @@ class atomic_ofstream(file):
base_destructor()
def write_atomic(file_path, content):
- f = atomic_ofstream(file_path)
+ f = None
try:
+ f = atomic_ofstream(file_path)
f.write(content)
f.close()
- except IOError, ioe:
- f.abort()
- raise ioe
+ except (IOError, OSError), e:
+ if f:
+ f.abort()
+ func_call = "write_atomic('%s')" % file_path
+ if e.errno == errno.EPERM:
+ raise OperationNotPermitted(func_call)
+ elif e.errno == errno.EACCES:
+ raise PermissionDenied(func_call)
+ elif e.errno == errno.EROFS:
+ raise ReadOnlyFileSystem(func_call)
+ elif e.errno == errno.ENOENT:
+ raise FileNotFound(file_path)
+ else:
+ raise
def ensure_dirs(dir_path, *args, **kwargs):
"""Create a directory and call apply_permissions.