summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Harring <ferringb@gentoo.org>2005-12-18 11:07:37 +0000
committerBrian Harring <ferringb@gentoo.org>2005-12-18 11:07:37 +0000
commit0e5af163b1fe7cb5ec9101930ce0905713ed775b (patch)
treea7500a2136584c40b420cf980faa0cae25eec8e9
parent01c1fc474258b88b84b836c8ac64b0390c32d9a8 (diff)
downloadportage-0e5af163b1fe7cb5ec9101930ce0905713ed775b.tar.gz
portage-0e5af163b1fe7cb5ec9101930ce0905713ed775b.tar.bz2
portage-0e5af163b1fe7cb5ec9101930ce0905713ed775b.zip
parallel-fetch, baby.
svn path=/main/trunk/; revision=2396
-rwxr-xr-xbin/emerge35
-rw-r--r--man/make.conf.53
-rw-r--r--pym/portage.py11
3 files changed, 38 insertions, 11 deletions
diff --git a/bin/emerge b/bin/emerge
index 7b4e7cd36..89dc9089f 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -1877,6 +1877,41 @@ class depgraph:
self.pkgsettings["FEATURES"]=string.join(myfeat)
+ if "parallel-fetch" in myfeat and not ("--ask" in myopts or "--pretend" in myopts or "--fetchonly" in myopts):
+ if "distlocks" not in myfeat:
+ print red("!!!")
+ print red("!!!")+" parallel-fetching requires the distlocks feature enabled"
+ print red("!!!")+" you have it disabled, thus parallel-fetching is being disabled"
+ print red("!!!")
+ elif len(mymergelist) > 1:
+ print ">>> starting parallel fetching"
+ pid = os.fork()
+ if not pid:
+ sys.stdin.close()
+ sys.stdout.close()
+ sys.stderr.close()
+ sys.stdout = open("/dev/null","w")
+ sys.stderr = open("/dev/null","w")
+ os.dup2(sys.stdout.fileno(), 1)
+ os.dup2(sys.stdout.fileno(), 2)
+ for x in ("autoaddcvs", "cvs"):
+ try: myfeat.remove(x)
+ except ValueError: pass
+ self.pkgsettings["FEATURES"] = " ".join(myfeat)
+ ret = 0
+ for x in mymergelist:
+ if x[0] != "ebuild":
+ continue
+ try:
+ ret = portage.doebuild(portage.portdb.findname(x[2]), "fetch", x[1], self.pkgsettings,
+ cleanup=0, fetchonly=True, tree="porttree")
+ except SystemExit:
+ raise
+ except Exception:
+ ret = 1
+ sys.exit(0)
+ portage.portage_exec.spawned_pids.append(pid)
+
mergecount=0
for x in mymergelist:
mergecount+=1
diff --git a/man/make.conf.5 b/man/make.conf.5
index 220077b80..5f5a4b704 100644
--- a/man/make.conf.5
+++ b/man/make.conf.5
@@ -192,6 +192,9 @@ Prevents the stripping of binaries that are merged to the live filesystem.
.B notitles
Disables xterm titlebar updates (which contains status info).
.TP
+.B parallel-fetch
+Fetch in the background while compiling.
+.TP
.B sandbox
Enable sandbox\-ing when running \fBemerge\fR(1) and \fBebuild(1)\fR.
.TP
diff --git a/pym/portage.py b/pym/portage.py
index bfaa1dee2..7875585e5 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -130,9 +130,6 @@ def exithandler(signum,frame):
signal.signal(signal.SIGTERM, signal.SIG_IGN)
# 0=send to *everybody* in process group
- portageexit()
- print "Exiting due to signal"
- os.kill(0,signum)
sys.exit(1)
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
@@ -6987,14 +6984,6 @@ def do_upgrade(mykey):
def portageexit():
global uid,portage_gid,portdb,db
if secpass and not os.environ.has_key("SANDBOX_ACTIVE"):
- # wait child process death
- try:
- while True:
- os.wait()
- except OSError:
- #writemsg(">>> All child process are now dead.")
- pass
-
close_portdbapi_caches()
if mtimedb: