diff options
author | Zac Medico <zmedico@gentoo.org> | 2006-10-11 05:54:12 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2006-10-11 05:54:12 +0000 |
commit | 521dacce2bc7037371e4a8958dc3a7ab3983a9bf (patch) | |
tree | 095df22b79f6eaa19a938ff9c9652f06e41215e8 /bin | |
parent | 92e8479365b7c38dedbdd96e1b8e3eb2645506d4 (diff) | |
download | portage-521dacce2bc7037371e4a8958dc3a7ab3983a9bf.tar.gz portage-521dacce2bc7037371e4a8958dc3a7ab3983a9bf.tar.bz2 portage-521dacce2bc7037371e4a8958dc3a7ab3983a9bf.zip |
Move PORTAGE_BUILDDIR in to a category subdirectory and clean up the category directory if empty (while holding lock). This this will help avoid PORTAGE_BUILDDIR collisions for parallel builds and will also hack around bug #150454.
svn path=/main/trunk/; revision=4654
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/emerge | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/bin/emerge b/bin/emerge index f82448a4a..ee53b647e 100755 --- a/bin/emerge +++ b/bin/emerge @@ -2118,14 +2118,23 @@ class MergeTask(object): portage.doebuild_environment(y, "setup", myroot, pkgsettings, self.edebug, 1, portdb) - portage_util.ensure_dirs( - os.path.dirname(pkgsettings["PORTAGE_BUILDDIR"]), + catdir = os.path.dirname(pkgsettings["PORTAGE_BUILDDIR"]) + portage_util.ensure_dirs(os.path.dirname(catdir), uid=portage.portage_uid, gid=portage.portage_gid, mode=070, mask=0) builddir_lock = None + catdir_lock = None try: + catdir_lock = portage_locks.lockdir(catdir) + portage_util.ensure_dirs(catdir, + uid=portage.portage_uid, gid=portage.portage_gid, + mode=070, mask=0) builddir_lock = portage_locks.lockdir( pkgsettings["PORTAGE_BUILDDIR"]) + try: + portage_locks.unlockdir(catdir_lock) + finally: + catdir_lock = None msg = " === (%s of %s) Cleaning (%s::%s)" % \ (mergecount, len(mymergelist), pkg_key, y) short_msg = "emerge: (%s of %s) %s Clean" % \ @@ -2187,6 +2196,19 @@ class MergeTask(object): finally: if builddir_lock: portage_locks.unlockdir(builddir_lock) + try: + if not catdir_lock: + # Lock catdir for removal if empty. + catdir_lock = portage_locks.lockdir(catdir) + finally: + if catdir_lock: + try: + os.rmdir(catdir) + except OSError, e: + if e.errno != errno.ENOTEMPTY: + raise + del e + portage_locks.unlockdir(catdir_lock) elif x[0]=="binary": #merge the tbz2 |