|
|
@@ -44,6 +44,7 @@ import ssl
|
|
|
import subprocess
|
|
|
import sys
|
|
|
import tarfile
|
|
|
+import time
|
|
|
from collections import OrderedDict, namedtuple
|
|
|
from ssl import SSLContext # noqa: F401
|
|
|
from tarfile import TarFile # noqa: F401
|
|
|
@@ -394,19 +395,19 @@ def download(url, destination): # type: (str, str) -> None
|
|
|
# https://github.com/espressif/esp-idf/issues/4063#issuecomment-531490140
|
|
|
# https://stackoverflow.com/a/43046729
|
|
|
def rename_with_retry(path_from, path_to): # type: (str, str) -> None
|
|
|
- if sys.platform.startswith('win'):
|
|
|
- retry_count = 100
|
|
|
- else:
|
|
|
- retry_count = 1
|
|
|
-
|
|
|
+ retry_count = 20 if sys.platform.startswith('win') else 1
|
|
|
for retry in range(retry_count):
|
|
|
try:
|
|
|
os.rename(path_from, path_to)
|
|
|
return
|
|
|
- except (OSError, WindowsError): # WindowsError until Python 3.3, then OSError
|
|
|
+ except OSError:
|
|
|
+ msg = f'Rename {path_from} to {path_to} failed'
|
|
|
if retry == retry_count - 1:
|
|
|
+ fatal(msg + '. Antivirus software might be causing this. Disabling it temporarily could solve the issue.')
|
|
|
raise
|
|
|
- warn('Rename {} to {} failed, retrying...'.format(path_from, path_to))
|
|
|
+ warn(msg + ', retrying...')
|
|
|
+ # Sleep before the next try in order to pass the antivirus check on Windows
|
|
|
+ time.sleep(0.5)
|
|
|
|
|
|
|
|
|
def strip_container_dirs(path, levels): # type: (str, int) -> None
|