Bug 1539614 [wpt PR 16077] - HTML: move textarea tests together, a=testonly
[gecko.git] / testing / web-platform / tests / tools / docker / retry.py
blob6126b781bfadd15e82b8a3a3b9494050939eab6c
1 #! /usr/bin/env python
2 import argparse
3 import subprocess
4 import time
5 import sys
8 def get_args():
9 parser = argparse.ArgumentParser()
10 parser.add_argument("--delay", action="store", type=float, default=3, help="Initial delay before retry, in seconds")
11 parser.add_argument("--count", action="store", type=int, default=5, help="Total number of tries")
12 parser.add_argument("--factor", action="store", type=float, default=2, help="Exponential backoff factor")
13 parser.add_argument("cmd", nargs=argparse.REMAINDER)
14 return parser
17 def iter_range(n):
18 i = 0
19 while i < n:
20 yield i
21 i += 1
24 def main():
25 args = get_args().parse_args()
27 if not args.cmd:
28 print("No command supplied")
29 sys.exit(1)
31 retcode = None
33 for n in iter_range(args.count):
34 try:
35 print("Running %s [try %d/%d]" % (" ".join(args.cmd), (n+1), args.count))
36 subprocess.check_call(args.cmd)
37 except subprocess.CalledProcessError as e:
38 retcode = e.returncode
39 else:
40 print("Command succeeded")
41 retcode = 0
42 break
44 if args.factor == 0:
45 wait_time = (n+1) * args.delay
46 else:
47 wait_time = args.factor**n * args.delay
48 if n < args.count - 1:
49 print("Command failed, waiting %s seconds to retry" % wait_time)
50 time.sleep(wait_time)
51 else:
52 print("Command failed, out of retries")
54 sys.exit(retcode)
57 if __name__ == "__main__":
58 main()