From ee0b00baf07f18c23a180da5efd78fe01335364b Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 6 Apr 2010 20:54:11 -0700 Subject: Make ensure_dirs() behave correctly for DragonFly when EPERM is raised for makedir('/'). Thanks to Naohiro Aota for the initial patch. --- pym/portage/util/__init__.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pym/portage/util/__init__.py b/pym/portage/util/__init__.py index 541204334..ac191fb2a 100644 --- a/pym/portage/util/__init__.py +++ b/pym/portage/util/__init__.py @@ -1046,14 +1046,19 @@ def ensure_dirs(dir_path, *args, **kwargs): func_call = "makedirs('%s')" % dir_path if oe.errno in (errno.EEXIST, errno.EISDIR): pass - elif oe.errno == errno.EPERM: - raise OperationNotPermitted(func_call) - elif oe.errno == errno.EACCES: - raise PermissionDenied(func_call) - elif oe.errno == errno.EROFS: - raise ReadOnlyFileSystem(func_call) else: - raise + if os.path.isdir(dir_path): + # NOTE: DragonFly raises EPERM for makedir('/') + # and that is supposed to be ignored here. + pass + elif oe.errno == errno.EPERM: + raise OperationNotPermitted(func_call) + elif oe.errno == errno.EACCES: + raise PermissionDenied(func_call) + elif oe.errno == errno.EROFS: + raise ReadOnlyFileSystem(func_call) + else: + raise perms_modified = apply_permissions(dir_path, *args, **kwargs) return created_dir or perms_modified -- cgit v1.2.3-1-g7c22