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.
diff --git a/emsdk.py b/emsdk.py
index 9e363fb..44a5a7c 100755
--- a/emsdk.py
+++ b/emsdk.py
@@ -1885,6 +1885,14 @@
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 @@
# 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 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 @@
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 @@
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')