Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Side by Side Diff: parallel_emerge

Issue 6055004: Fix bug 10466: parallel_emerge use flag calculation favors local binhost. (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python2.6 1 #!/usr/bin/python2.6
2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Program to run emerge in parallel, for significant speedup. 6 """Program to run emerge in parallel, for significant speedup.
7 7
8 Usage: 8 Usage:
9 ./parallel_emerge [--board=BOARD] [--workon=PKGS] [--no-workon-deps] 9 ./parallel_emerge [--board=BOARD] [--workon=PKGS] [--no-workon-deps]
10 [--force-remote-binary=PKGS] [emerge args] package 10 [--force-remote-binary=PKGS] [emerge args] package
(...skipping 1174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 remote_ready = PrebuiltsReady(pkg, remote_pkgs, remote_ready_cache) 1185 remote_ready = PrebuiltsReady(pkg, remote_pkgs, remote_ready_cache)
1186 if remote_ready and (local_mtime <= remote_mtime or pkg in cycles): 1186 if remote_ready and (local_mtime <= remote_mtime or pkg in cycles):
1187 MergeChildren(pkg, "mandatory") 1187 MergeChildren(pkg, "mandatory")
1188 else: 1188 else:
1189 MergeChildren(pkg, "mandatory_source") 1189 MergeChildren(pkg, "mandatory_source")
1190 1190
1191 def UsePrebuiltPackages(remote_pkgs): 1191 def UsePrebuiltPackages(remote_pkgs):
1192 """Update packages that can use prebuilts to do so.""" 1192 """Update packages that can use prebuilts to do so."""
1193 start = time.time() 1193 start = time.time()
1194 1194
1195 # The bintree is the database of binary packages. By default, it's 1195 # Build list of prebuilt packages
1196 # empty.
1197 bintree = emerge.trees[root]["bintree"]
1198 bindb = bintree.dbapi
1199 root_config = emerge.root_config
1200 pkgsettings = emerge.depgraph._frozen_config.pkgsettings[root]
1201 prebuilt_pkgs = {} 1196 prebuilt_pkgs = {}
1202
1203 # Populate the DB with packages
1204 bintree.populate("--getbinpkg" in emerge.opts,
1205 "--getbinpkgonly" in emerge.opts)
1206
1207 # Build list of prebuilt packages
1208 for pkg, info in deps_map.iteritems(): 1197 for pkg, info in deps_map.iteritems():
1209 if info and info["action"] == "merge": 1198 if info and info["action"] == "merge":
1210 if (not info["force_remote_binary"] and info["mandatory_source"] or 1199 if (not info["force_remote_binary"] and info["mandatory_source"] or
1211 "--usepkgonly" not in emerge.opts and pkg not in remote_pkgs): 1200 "--usepkgonly" not in emerge.opts and pkg not in remote_pkgs):
1212 continue 1201 continue
1213 1202
1214 db_keys = list(bindb._aux_cache_keys) 1203 db_pkg = emerge.depgraph._pkg(pkg, "binary", emerge.root_config)
1215 try: 1204 if info["force_remote_binary"]:
1216 db_vals = bindb.aux_get(pkg, db_keys + ["MTIME"]) 1205 # Undo our earlier hacks to the use flags so that the use flags
1217 except KeyError: 1206 # display correctly.
1218 # No binary package 1207 db_pkg.use.enabled = db_pkg.metadata["USE"].split()
1219 continue
1220
1221 mtime = int(db_vals.pop() or 0)
1222 metadata = zip(db_keys, db_vals)
1223 db_pkg = Package(built=True, cpv=pkg, installed=False,
1224 metadata=metadata, onlydeps=False, mtime=mtime,
1225 operation="merge", root_config=root_config,
1226 type_name="binary")
1227 prebuilt_pkgs[pkg] = db_pkg 1208 prebuilt_pkgs[pkg] = db_pkg
1228 1209
1229 # Calculate what packages need to be rebuilt due to changes in use flags. 1210 # Calculate what packages need to be rebuilt due to changes in use flags.
1211 pkgsettings = emerge.depgraph._frozen_config.pkgsettings[root]
1230 for pkg, db_pkg in prebuilt_pkgs.iteritems(): 1212 for pkg, db_pkg in prebuilt_pkgs.iteritems():
1231 if not self.CheckUseFlags(pkgsettings, db_pkg, self.package_db[pkg]): 1213 if not self.CheckUseFlags(pkgsettings, db_pkg, self.package_db[pkg]):
1232 MergeChildren(pkg, "mandatory_source") 1214 MergeChildren(pkg, "mandatory_source")
1233 1215
1234 # Convert eligible packages to binaries. 1216 # Convert eligible packages to binaries.
1235 for pkg, info in deps_map.iteritems(): 1217 for pkg, info in deps_map.iteritems():
1236 if info and info["action"] == "merge" and pkg in prebuilt_pkgs: 1218 if info and info["action"] == "merge" and pkg in prebuilt_pkgs:
1237 if not info["mandatory_source"] or info["force_remote_binary"]: 1219 if not info["mandatory_source"] or info["force_remote_binary"]:
1238 self.package_db[pkg] = prebuilt_pkgs[pkg] 1220 self.package_db[pkg] = prebuilt_pkgs[pkg]
1239 1221
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
1894 # need to upgrade the rest of the packages. So we'll go ahead and do that. 1876 # need to upgrade the rest of the packages. So we'll go ahead and do that.
1895 if portage_upgrade: 1877 if portage_upgrade:
1896 args = sys.argv[1:] + ["--nomerge=sys-apps/portage"] 1878 args = sys.argv[1:] + ["--nomerge=sys-apps/portage"]
1897 os.execvp(os.path.realpath(sys.argv[0]), args) 1879 os.execvp(os.path.realpath(sys.argv[0]), args)
1898 1880
1899 print "Done" 1881 print "Done"
1900 sys.exit(0) 1882 sys.exit(0)
1901 1883
1902 if __name__ == "__main__": 1884 if __name__ == "__main__":
1903 main() 1885 main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698