From 009ab2c77f568d9331c7ff1d3943de78a6eda60d Mon Sep 17 00:00:00 2001 From: Dan Field Date: Wed, 1 Apr 2020 13:46:22 -0700 Subject: [PATCH] Avoid re-downloading files that are already downloaded (#460) * Writes a .emsdk_version file to output directories using the name (which contains a version number and/or hash) once all installation steps have completed successfully. * If that file exists, skip downloading/installation hooks. --- emsdk.py | 10 ++++++++++ test.py | 29 ++++++++++++++++------------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/emsdk.py b/emsdk.py index 9e363fb..44a5a7c 100755 --- a/emsdk.py +++ b/emsdk.py @@ -1885,6 +1885,14 @@ class Tool(object): print("Skipped installing " + self.name + ", already installed.") return True + version_id = self.name + version_file_path = os.path.join(self.installation_path(), '.emsdk_version') + if os.path.isfile(version_file_path): + with open(version_file_path, 'r') as version_file: + if version_id == version_file.read(): + print("Skipped installing " + self.name + ", already installed.") + return True + print("Installing tool '" + str(self) + "'..") url = self.download_url() @@ -1945,6 +1953,8 @@ class Tool(object): # leftover installation files. if self.is_installed(): self.cleanup_temp_install_files() + with open(version_file_path, 'w') as version_file: + version_file.write(version_id) else: print("Warning: The installation of '" + str(self) + "' seems to have failed, but no error was detected. Either something went wrong with the installation, or this may indicate an internal emsdk error.") return True diff --git a/test.py b/test.py index a1bd4ca..aaaee8a 100755 --- a/test.py +++ b/test.py @@ -6,6 +6,19 @@ import subprocess import sys import tempfile +WINDOWS = sys.platform.startswith('win') +MACOS = sys.platform == 'darwin' + +upstream_emcc = os.path.join('upstream', 'emscripten', 'emcc') +fastcomp_emcc = os.path.join('fastcomp', 'emscripten', 'emcc') +emsdk = './emsdk' +if WINDOWS: + upstream_emcc += '.bat' + fastcomp_emcc += '.bat' + emsdk = 'emsdk.bat' +else: + emsdk = './emsdk' + # Utilities @@ -71,6 +84,9 @@ print('test .emscripten contents (latest was installed/activated in test.sh)') assert 'fastcomp' not in open(os.path.expanduser('~/.emscripten')).read() assert 'upstream' in open(os.path.expanduser('~/.emscripten')).read() +# Test we don't re-download unnecessarily +checked_call_with_output(emsdk + ' install latest', expected='already installed', unexpected='Downloading:') + print('building proper system libraries') @@ -108,19 +124,6 @@ def run_emsdk(cmd): check_call([emsdk] + cmd) -WINDOWS = sys.platform.startswith('win') -MACOS = sys.platform == 'darwin' - -upstream_emcc = os.path.join('upstream', 'emscripten', 'emcc') -fastcomp_emcc = os.path.join('fastcomp', 'emscripten', 'emcc') -emsdk = './emsdk' -if WINDOWS: - upstream_emcc += '.bat' - fastcomp_emcc += '.bat' - emsdk = 'emsdk.bat' -else: - emsdk = './emsdk' - test_lib_building(upstream_emcc, use_asmjs_optimizer=True) print('update')