summaryrefslogtreecommitdiffstats
path: root/pym/portage_util.py
diff options
context:
space:
mode:
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.