Make doebuild() bail out early with a PermissionDenied error if there
authorZac Medico <zmedico@gentoo.org>
Fri, 11 Apr 2008 19:55:50 +0000 (19:55 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 11 Apr 2008 19:55:50 +0000 (19:55 -0000)
is no write access to $PKGDIR. (trunk r9837)

svn path=/main/branches/2.1.2/; revision=9838

pym/portage.py

index d54bc973ce6be7361d8dabbfbfd96c47b36039e2..aae53d20dce9090626c0acbb9291c3fe30159cf0 100644 (file)
@@ -5005,10 +5005,15 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
 
                if mydo in actionmap:
                        if mydo=="package":
-                               portage_util.ensure_dirs(
-                                       os.path.join(mysettings["PKGDIR"], mysettings["CATEGORY"]))
-                               portage_util.ensure_dirs(
-                                       os.path.join(mysettings["PKGDIR"], "All"))
+                               # Make sure the package directory exists before executing
+                               # this phase. This can raise PermissionDenied if
+                               # the current user doesn't have write access to $PKGDIR.
+                               for parent_dir in ("All", mysettings["CATEGORY"]):
+                                       parent_dir = os.path.join(mysettings["PKGDIR"], parent_dir)
+                                       portage_util.ensure_dirs(parent_dir)
+                                       if not os.access(parent_dir, os.W_OK):
+                                               raise portage_exception.PermissionDenied(
+                                                       "access('%s', os.W_OK)" % parent_dir)
                        retval = spawnebuild(mydo,
                                actionmap, mysettings, debug, logfile=logfile)
                elif mydo=="qmerge":