| Index: bin/parallel_emerge
|
| diff --git a/bin/parallel_emerge b/bin/parallel_emerge
|
| index b022ae790927fd7fa542a0df0b9764415b095955..e39ee4ebf72c66818ba0ce0c5d7fa7843dac6d98 100755
|
| --- a/bin/parallel_emerge
|
| +++ b/bin/parallel_emerge
|
| @@ -715,88 +715,21 @@ class DepGraphGenerator(object):
|
| print "%s %s (%s)" % (depth, entry, action)
|
| self.PrintTree(deps[entry]["deps"], depth=depth + " ")
|
|
|
| - def RemotePackageDatabase(self, binhost_url, settings):
|
| + def RemotePackageDatabase(self):
|
| """Grab the latest binary package database from the prebuilt server.
|
|
|
| We need to know the modification times of the prebuilt packages so that we
|
| know when it is OK to use these packages and when we should rebuild them
|
| instead.
|
|
|
| - Args:
|
| - binhost_url: Base URL of remote packages (PORTAGE_BINHOST).
|
| -
|
| Returns:
|
| A dict mapping package identifiers to modification times.
|
| """
|
| -
|
| - if not binhost_url:
|
| - return {}
|
| -
|
| - def retry_urlopen(url, tries=3):
|
| - """Open the specified url, retrying if we run into temporary errors.
|
| -
|
| - We retry for both network errors and 5xx Server Errors. We do not retry
|
| - for HTTP errors with a non-5xx code.
|
| -
|
| - Args:
|
| - url: The specified url.
|
| - tries: The number of times to try.
|
| -
|
| - Returns:
|
| - The result of urllib2.urlopen(url).
|
| - """
|
| - for i in range(tries):
|
| - try:
|
| - return urllib2.urlopen(url)
|
| - except urllib2.HTTPError as e:
|
| - print "Cannot GET %s: %s" % (url, str(e))
|
| - if i + 1 >= tries or e.code < 500:
|
| - raise
|
| - except urllib2.URLError as e:
|
| - print "Cannot GET %s: %s" % (url, str(e))
|
| - if i + 1 >= tries:
|
| - raise
|
| - print "Sleeping for 10 seconds before retrying..."
|
| - time.sleep(10)
|
| -
|
| - url = os.path.join(binhost_url, "Packages")
|
| - tmp_filename = None
|
| - if url.startswith("http://"):
|
| - try:
|
| - f = retry_urlopen(url)
|
| - except urllib2.HTTPError as e:
|
| - if e.code == 404:
|
| - return {}
|
| - else:
|
| - raise
|
| - else:
|
| - parsed_url = urlparse.urlparse(url)
|
| - setting = 'FETCHCOMMAND_' + parsed_url.scheme.upper()
|
| - fcmd = settings.get(setting)
|
| - if not fcmd:
|
| - print >>sys.stderr, "Unrecognized URL:", url
|
| - sys.exit(1)
|
| - fd, tmp_filename = tempfile.mkstemp()
|
| - tmp_dirname, tmp_basename = os.path.split(tmp_filename)
|
| - os.close(fd)
|
| - success = portage.getbinpkg.file_get(url, tmp_dirname, fcmd=fcmd,
|
| - filename=tmp_basename)
|
| - if not success:
|
| - os.unlink(tmp_filename)
|
| - return {}
|
| - f = open(tmp_filename)
|
| -
|
| + root = self.emerge.settings["ROOT"]
|
| + bindb = self.emerge.trees[root]["bintree"].dbapi
|
| prebuilt_pkgs = {}
|
| - for line in f:
|
| - if line.startswith("CPV: "):
|
| - pkg = line.replace("CPV: ", "").rstrip()
|
| - elif line.startswith("MTIME: "):
|
| - prebuilt_pkgs[pkg] = int(line[:-1].replace("MTIME: ", ""))
|
| - f.close()
|
| -
|
| - if tmp_filename:
|
| - os.unlink(tmp_filename)
|
| -
|
| + for pkg in bindb.cpv_all():
|
| + prebuilt_pkgs[pkg] = bindb.aux_get(pkg, ["BUILD_TIME"])[0]
|
| return prebuilt_pkgs
|
|
|
| def GenDependencyGraph(self, deps_tree, deps_info, remote_pkgs):
|
| @@ -1111,17 +1044,10 @@ class DepGraphGenerator(object):
|
| Returns:
|
| A dict mapping package identifiers to modification times.
|
| """
|
| - if self.board:
|
| - path = "/build/%s/packages/Packages" % self.board
|
| - else:
|
| - path = "/var/lib/portage/pkgs/Packages"
|
| + vardb = emerge.trees[root]["vartree"].dbapi
|
| local_pkgs = {}
|
| - for line in file(path):
|
| - if line.startswith("CPV: "):
|
| - pkg = line.replace("CPV: ", "").rstrip()
|
| - elif line.startswith("MTIME: "):
|
| - local_pkgs[pkg] = int(line[:-1].replace("MTIME: ", ""))
|
| -
|
| + for pkg in vardb.cpv_all():
|
| + local_pkgs[pkg] = vardb.aux_get(pkg, ["BUILD_TIME"])[0]
|
| return local_pkgs
|
|
|
| def AutoRebuildDeps(local_pkgs, remote_pkgs, cycles):
|
| @@ -1855,15 +1781,7 @@ def main():
|
|
|
| remote_pkgs = {}
|
| if "--getbinpkg" in emerge.opts:
|
| - binhosts = emerge.settings["PORTAGE_BINHOST"]
|
| - for binhost in binhosts.split():
|
| - try:
|
| - remote_pkgs.update(deps.RemotePackageDatabase(binhost, emerge.settings))
|
| - except (urllib2.HTTPError, urllib2.URLError):
|
| - pass
|
| - if not remote_pkgs:
|
| - print "Can't find any binary packages. Building from source..."
|
| - del emerge.opts["--getbinpkg"]
|
| + remote_pkgs = deps.RemotePackageDatabase()
|
|
|
| deps_tree, deps_info = deps.GenDependencyTree(remote_pkgs)
|
|
|
|
|