EbuildBuildDir: tolerate some permission issues
authorZac Medico <zmedico@gentoo.org>
Fri, 22 Oct 2010 14:12:15 +0000 (07:12 -0700)
committerZac Medico <zmedico@gentoo.org>
Fri, 22 Oct 2010 15:20:25 +0000 (08:20 -0700)
pym/_emerge/EbuildBuildDir.py

index de3f56dfb29a47a3883022865b224f82fe41da4b..ba18269b1010b1a6fafbff5c11ad260763e824e4 100644 (file)
@@ -5,6 +5,7 @@ from _emerge.AsynchronousLock import AsynchronousLock
 from _emerge.SlotObject import SlotObject
 import portage
 from portage import os
+from portage.exception import PortageException
 import errno
 
 class EbuildBuildDir(SlotObject):
@@ -32,16 +33,24 @@ class EbuildBuildDir(SlotObject):
                catdir = os.path.dirname(dir_path)
                self._catdir = catdir
 
-               portage.util.ensure_dirs(os.path.dirname(catdir),
-                       gid=portage.portage_gid,
-                       mode=0o70, mask=0)
+               try:
+                       portage.util.ensure_dirs(os.path.dirname(catdir),
+                               gid=portage.portage_gid,
+                               mode=0o70, mask=0)
+               except PortageException:
+                       if not os.path.isdir(os.path.dirname(catdir)):
+                               raise
                catdir_lock = AsynchronousLock(path=catdir, scheduler=self.scheduler)
                catdir_lock.start()
                catdir_lock.wait()
                try:
-                       portage.util.ensure_dirs(catdir,
-                               gid=portage.portage_gid,
-                               mode=0o70, mask=0)
+                       try:
+                               portage.util.ensure_dirs(catdir,
+                                       gid=portage.portage_gid,
+                                       mode=0o70, mask=0)
+                       except PortageException:
+                               if not os.path.isdir(catdir):
+                                       raise
                        builddir_lock = AsynchronousLock(path=dir_path,
                                scheduler=self.scheduler)
                        builddir_lock.start()