[Python-checkins] bpo-45055: Add retry when downloading externals on Windows (GH-28399)

miss-islington webhook-mailer at python.org
Mon Sep 20 10:59:20 EDT 2021


https://github.com/python/cpython/commit/50c0551f97f86bbf9f659e1bbe78a14df7754cbe
commit: 50c0551f97f86bbf9f659e1bbe78a14df7754cbe
branch: 3.9
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2021-09-20T07:59:15-07:00
summary:

bpo-45055: Add retry when downloading externals on Windows (GH-28399)


Co-authored-by: Łukasz Langa <lukasz at langa.pl>
(cherry picked from commit ef9e22b253253615098d22cb49141a2a1024ee3c)

Co-authored-by: Steve Dower <steve.dower at python.org>

files:
M PCbuild/get_external.py

diff --git a/PCbuild/get_external.py b/PCbuild/get_external.py
index a682d3849f14c..4ecc8925349c9 100755
--- a/PCbuild/get_external.py
+++ b/PCbuild/get_external.py
@@ -3,6 +3,8 @@
 import argparse
 import os
 import pathlib
+import sys
+import time
 import zipfile
 from urllib.request import urlretrieve
 
@@ -53,7 +55,22 @@ def main():
         verbose=args.verbose,
     )
     final_name = args.externals_dir / args.tag
-    extract_zip(args.externals_dir, zip_path).replace(final_name)
+    extracted = extract_zip(args.externals_dir, zip_path)
+    for wait in [1, 2, 3, 5, 8, 0]:
+        try:
+            extracted.replace(final_name)
+            break
+        except PermissionError as ex:
+            retry = f" Retrying in {wait}s..." if wait else ""
+            print(f"Encountered permission error '{ex}'.{retry}", file=sys.stderr)
+            time.sleep(wait)
+    else:
+        print(
+            f"ERROR: Failed to extract {final_name}.",
+            "You may need to restart your build",
+            file=sys.stderr,
+        )
+        sys.exit(1)
 
 
 if __name__ == '__main__':



More information about the Python-checkins mailing list