Chromium Code Reviews| 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] [--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 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 660 binhost_url: Base URL of remote packages (PORTAGE_BINHOST). | 660 binhost_url: Base URL of remote packages (PORTAGE_BINHOST). |
| 661 | 661 |
| 662 Returns: | 662 Returns: |
| 663 A dict mapping package identifiers to modification times. | 663 A dict mapping package identifiers to modification times. |
| 664 """ | 664 """ |
| 665 | 665 |
| 666 if not binhost_url: | 666 if not binhost_url: |
| 667 return {} | 667 return {} |
| 668 | 668 |
| 669 def retry_urlopen(url, tries=3): | 669 def retry_urlopen(url, tries=3): |
| 670 """Open the specified url, retrying if we run into network errors. | 670 """Open the specified url, retrying if we run into temporary errors. |
| 671 | 671 |
| 672 We do not retry for HTTP errors. | 672 We retry for both network errors and 5xx Server Errors. We do not retry |
| 673 for HTTP errors with a non-5xx code. | |
| 673 | 674 |
| 674 Args: | 675 Args: |
| 675 url: The specified url. | 676 url: The specified url. |
| 676 tries: The number of times to try. | 677 tries: The number of times to try. |
| 677 | 678 |
| 678 Returns: | 679 Returns: |
| 679 The result of urllib2.urlopen(url). | 680 The result of urllib2.urlopen(url). |
| 680 """ | 681 """ |
| 681 for i in range(tries): | 682 for i in range(tries): |
| 682 try: | 683 try: |
| 683 return urllib2.urlopen(url) | 684 return urllib2.urlopen(url) |
| 684 except urllib2.HTTPError as e: | 685 except urllib2.HTTPError as e: |
| 685 raise | 686 if i + 1 == tries or e.code < 500: |
|
sosa
2010/11/16 18:09:25
use >= in case
| |
| 687 raise | |
| 688 else: | |
| 689 print "Cannot GET %s: %s" % (url, e) | |
|
sosa
2010/11/16 18:09:25
Adding a retrying message and you should probably
| |
| 686 except urllib2.URLError as e: | 690 except urllib2.URLError as e: |
| 687 if i + 1 == tries: | 691 if i + 1 == tries: |
| 688 raise | 692 raise |
| 689 else: | 693 else: |
| 690 print "Cannot GET %s: %s" % (url, e) | 694 print "Cannot GET %s: %s" % (url, e) |
| 691 | 695 |
| 692 url = os.path.join(binhost_url, "Packages") | 696 url = os.path.join(binhost_url, "Packages") |
| 693 try: | 697 try: |
| 694 f = retry_urlopen(url) | 698 f = retry_urlopen(url) |
| 695 except urllib2.HTTPError as e: | 699 except urllib2.HTTPError as e: |
| (...skipping 1134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1830 # need to upgrade the rest of the packages. So we'll go ahead and do that. | 1834 # need to upgrade the rest of the packages. So we'll go ahead and do that. |
| 1831 if portage_upgrade: | 1835 if portage_upgrade: |
| 1832 args = sys.argv[1:] + ["--nomerge=sys-apps/portage"] | 1836 args = sys.argv[1:] + ["--nomerge=sys-apps/portage"] |
| 1833 os.execvp(os.path.realpath(sys.argv[0]), args) | 1837 os.execvp(os.path.realpath(sys.argv[0]), args) |
| 1834 | 1838 |
| 1835 print "Done" | 1839 print "Done" |
| 1836 sys.exit(0) | 1840 sys.exit(0) |
| 1837 | 1841 |
| 1838 if __name__ == "__main__": | 1842 if __name__ == "__main__": |
| 1839 main() | 1843 main() |
| OLD | NEW |