.TP
.B ebuild\-locks
Use locks to ensure that unsandboxed ebuild phases never execute
-concurrently.
+concurrently. Also see \fIparallel\-install\fR.
.TP
.B fakeroot
Enable fakeroot for the install and package phases when a non-root user runs
`tail \-f /var/log/emerge\-fetch.log` in a
terminal to view parallel-fetch progress.
.TP
+.B parallel\-install
+Use finer\-grained locks when installing packages, allowing for greater
+parallelization. For additional parallelization, disable
+\fIebuild\-locks\fR.
+.TP
.B parse\-eapi\-ebuild\-head
Parse \fBEAPI\fR from the head of the ebuild (first 30 lines). This feature
is only intended for experimental purposes and should not be enabled under
def _set_max_jobs(self, max_jobs):
self._max_jobs = max_jobs
self._task_queues.jobs.max_jobs = max_jobs
- self._task_queues.merge.max_jobs = max_jobs
+ if "parallel-install" in self.settings.features:
+ self._task_queues.merge.max_jobs = max_jobs
def _background_mode(self):
"""
"installsources", "keeptemp", "keepwork", "fixlafiles", "lmirror",
"metadata-transfer", "mirror", "multilib-strict", "news",
"noauto", "noclean", "nodoc", "noinfo", "noman",
- "nostrip", "notitles", "parallel-fetch", "parse-eapi-ebuild-head",
+ "nostrip", "notitles", "parallel-fetch", "parallel-install",
+ "parse-eapi-ebuild-head",
"prelink-checksums", "preserve-libs",
"protect-owned", "python-trace", "sandbox",
"selinux", "sesandbox", "severe", "sfperms",
"""
myroot = None
retval = -1
+ parallel_install = "parallel-install" in self.settings.features
+ if not parallel_install:
+ self.lockdb()
self.vartree.dbapi._bump_mtime(self.mycpv)
try:
retval = self.treewalk(mergeroot, myroot, inforoot, myebuild,
else:
self.vartree.dbapi._linkmap._clear_cache()
self.vartree.dbapi._bump_mtime(self.mycpv)
+ if not parallel_install:
+ self.unlockdb()
return retval
def getstring(self,name):
mylink = dblink(cat, pkg, settings=settings, treetype="vartree",
vartree=vartree, scheduler=scheduler)
vartree = mylink.vartree
+ parallel_install = "parallel-install" in self.settings.features
+ if not parallel_install:
+ self.lockdb()
try:
if mylink.exists():
retval = mylink.unmerge(ldpath_mtimes=ldpath_mtimes)
pass
else:
vartree.dbapi._linkmap._clear_cache()
+ if not parallel_install:
+ self.unlockdb()
def write_contents(contents, root, f):
"""