Index: recipe_modules/bot_update/resources/bot_update.py |
diff --git a/recipe_modules/bot_update/resources/bot_update.py b/recipe_modules/bot_update/resources/bot_update.py |
index 03b14e502fa4907593fe3051d7d64060791a1b38..58952f81c66991a1a0b90d09d1383809f7cc629b 100755 |
--- a/recipe_modules/bot_update/resources/bot_update.py |
+++ b/recipe_modules/bot_update/resources/bot_update.py |
@@ -543,10 +543,11 @@ def git_checkout(solutions, revisions, shallow, refs, git_cache_dir): |
raise Exception('%s exists after cache unlock' % filename) |
first_solution = True |
for sln in solutions: |
- # This is so we can loop back and try again if we need to wait for the |
- # git mirrors to update from SVN. |
+ # Just in case we're hitting a different git server than the one from |
+ # which the target revision was polled, we retry some. |
done = False |
- tries_left = 60 |
+ deadline = time.time() + 60 # One minute (5 tries with exp. backoff). |
+ tries = 0 |
while not done: |
name = sln['name'] |
url = sln['url'] |
@@ -582,14 +583,18 @@ def git_checkout(solutions, revisions, shallow, refs, git_cache_dir): |
done = True |
except SubprocessFailed as e: |
# Exited abnormally, theres probably something wrong. |
- # Lets wipe the checkout and try again. |
- tries_left -= 1 |
- if tries_left > 0: |
- print 'Something failed: %s.' % str(e) |
- print 'waiting 5 seconds and trying again...' |
- time.sleep(5) |
- else: |
+ print 'Something failed: %s.' % str(e) |
+ |
+ if time.time() > deadline: |
+ overrun = time.time() - deadline |
+ print 'Ran %s seconds past deadline. Aborting.' % overrun |
raise |
+ |
+ # Lets wipe the checkout and try again. |
+ tries += 1 |
+ sleep_secs = 2**tries |
+ print 'waiting %s seconds and trying again...' % sleep_secs |
+ time.sleep(sleep_secs) |
remove(sln_dir) |
git('clean', '-dff', cwd=sln_dir) |