| OLD | NEW |
| 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 [emerge args] package | 9 ./parallel_emerge --board=BOARD [emerge args] package |
| 10 | 10 |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 target = self._retry_queue.pop(0) | 545 target = self._retry_queue.pop(0) |
| 546 self._emerge_queue.append(target) | 546 self._emerge_queue.append(target) |
| 547 print "Retrying emerge of %s." % target | 547 print "Retrying emerge of %s." % target |
| 548 | 548 |
| 549 def Run(self): | 549 def Run(self): |
| 550 """Run through the scheduled ebuilds. | 550 """Run through the scheduled ebuilds. |
| 551 | 551 |
| 552 Keep running so long as we have uninstalled packages in the | 552 Keep running so long as we have uninstalled packages in the |
| 553 dependency graph to merge. | 553 dependency graph to merge. |
| 554 """ | 554 """ |
| 555 secs = 0 |
| 555 while self._deps_map: | 556 while self._deps_map: |
| 556 # If we have packages that are ready, kick them off. | 557 # If we have packages that are ready, kick them off. |
| 557 if self._emerge_queue and len(self._jobs) < JOBS: | 558 if self._emerge_queue and len(self._jobs) < JOBS: |
| 558 target = self._emerge_queue.pop(0) | 559 target = self._emerge_queue.pop(0) |
| 559 action = self._deps_map[target]["action"] | 560 action = self._deps_map[target]["action"] |
| 560 # We maintain a tree of all deps, if this doesn't need | 561 # We maintain a tree of all deps, if this doesn't need |
| 561 # to be installed just free up it's children and continue. | 562 # to be installed just free up it's children and continue. |
| 562 # It is possible to reinstall deps of deps, without reinstalling | 563 # It is possible to reinstall deps of deps, without reinstalling |
| 563 # first level deps, like so: | 564 # first level deps, like so: |
| 564 # chromeos (merge) -> eselect (nomerge) -> python (merge) | 565 # chromeos (merge) -> eselect (nomerge) -> python (merge) |
| 565 if action == "nomerge": | 566 if action == "nomerge": |
| 566 self._Finish(target) | 567 self._Finish(target) |
| 567 else: | 568 else: |
| 568 # Kick off the build if it's marked to be built. | 569 # Kick off the build if it's marked to be built. |
| 569 print "Emerging %s (%s)" % (target, action) | 570 print "Emerging %s (%s)" % (target, action) |
| 570 job = self._LaunchOneEmerge(target) | 571 job = self._LaunchOneEmerge(target) |
| 571 # Append it to the active jobs list. | 572 # Append it to the active jobs list. |
| 572 self._jobs.append(job) | 573 self._jobs.append(job) |
| 573 continue | 574 continue |
| 574 # Wait a bit to see if maybe some jobs finish. You can't | 575 # Wait a bit to see if maybe some jobs finish. You can't |
| 575 # wait on a set of jobs in python, so we'll just poll. | 576 # wait on a set of jobs in python, so we'll just poll. |
| 576 time.sleep(1) | 577 time.sleep(1) |
| 578 secs += 1 |
| 579 if secs % 30 == 0: |
| 580 # Print an update. |
| 581 self._Status() |
| 577 | 582 |
| 578 # Check here that we are actually waiting for something. | 583 # Check here that we are actually waiting for something. |
| 579 if (not self._emerge_queue and | 584 if (not self._emerge_queue and |
| 580 not self._jobs and | 585 not self._jobs and |
| 581 self._deps_map): | 586 self._deps_map): |
| 582 # If we have failed on a package, retry it now. | 587 # If we have failed on a package, retry it now. |
| 583 if self._retry_queue: | 588 if self._retry_queue: |
| 584 self._Retry() | 589 self._Retry() |
| 585 # If we have failed a package twice, just give up. | 590 # If we have failed a package twice, just give up. |
| 586 elif self._failed: | 591 elif self._failed: |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 | 665 |
| 661 if VERBOSE: | 666 if VERBOSE: |
| 662 PrintDepsMap(dependency_graph) | 667 PrintDepsMap(dependency_graph) |
| 663 | 668 |
| 664 # Run the queued emerges. | 669 # Run the queued emerges. |
| 665 scheduler = EmergeQueue(dependency_graph) | 670 scheduler = EmergeQueue(dependency_graph) |
| 666 scheduler.Run() | 671 scheduler.Run() |
| 667 | 672 |
| 668 print "Done" | 673 print "Done" |
| 669 | 674 |
| OLD | NEW |