Merged from trunk -r11795:11796
authorFabian Groffen <grobian@gentoo.org>
Sun, 2 Nov 2008 10:02:21 +0000 (10:02 -0000)
committerFabian Groffen <grobian@gentoo.org>
Sun, 2 Nov 2008 10:02:21 +0000 (10:02 -0000)
   | 11796   | Bug #245231 - Make EbuildFetchPretend use a private temp     |
   | zmedico | directory in order to avoid locking the main one.            |

svn path=/main/branches/prefix/; revision=11798

pym/_emerge/__init__.py

index c7f8aa88e47d42782270b620b75f3138dd3d22ac..64a394d22b77b9eb6ab5bd203907fa5ffbff2097 100644 (file)
@@ -1617,7 +1617,23 @@ class EbuildFetchPretend(SlotObject):
        def execute(self):
                # To spawn pkg_nofetch requires PORTAGE_BUILDDIR for
                # ensuring sane $PWD (bug #239560) and storing elog
-               # messages.
+               # messages. Use a private temp directory, in order
+               # to avoid locking the main one.
+               settings = self.settings
+               global_tmpdir = settings["PORTAGE_TMPDIR"]
+               from tempfile import mkdtemp
+               private_tmpdir = mkdtemp("", "._portage_fetch_.", global_tmpdir)
+               settings["PORTAGE_TMPDIR"] = private_tmpdir
+               settings.backup_changes("PORTAGE_TMPDIR")
+               try:
+                       retval = self._execute()
+               finally:
+                       settings["PORTAGE_TMPDIR"] = global_tmpdir
+                       settings.backup_changes("PORTAGE_TMPDIR")
+                       shutil.rmtree(private_tmpdir)
+               return retval
+
+       def _execute(self):
                build_dir = EbuildBuildDir(pkg=self.pkg, settings=self.settings)
                build_dir.lock()
                build_dir.clean()
@@ -2394,7 +2410,7 @@ class EbuildBuildDir(SlotObject):
                self._catdir = catdir
 
                portage.util.ensure_dirs(os.path.dirname(catdir),
-                       uid=portage.portage_uid, gid=portage.portage_gid,
+                       gid=portage.portage_gid,
                        mode=070, mask=0)
                catdir_lock = None
                try: