Index: telemetry/third_party/numpy/roll_numpy |
diff --git a/telemetry/third_party/numpy/roll_numpy b/telemetry/third_party/numpy/roll_numpy |
index 9e0b3690404f821a3928530e9da4d955f09eed6e..45d62520a9508105512600d50a90d6d08adf0018 100755 |
--- a/telemetry/third_party/numpy/roll_numpy |
+++ b/telemetry/third_party/numpy/roll_numpy |
@@ -24,6 +24,9 @@ from telemetry.core import platform as platform_module |
sys.path.append(os.path.join(CATAPULT_ROOT, 'dependency_manager')) |
from dependency_manager import base_config |
+class RollError(Exception): |
+ pass |
+ |
# Dependency update helper |
def update_dependency(dependency, path, version): |
config = os.path.join(CATAPULT_ROOT, 'telemetry', 'telemetry', 'internal', |
@@ -34,11 +37,26 @@ def update_dependency(dependency, path, version): |
platform = "{}_{}".format(os_name, arch_name) |
c = base_config.BaseConfig(config, writable=True) |
- c.AddCloudStorageDependencyUpdateJob( |
- dependency, platform, path, version=version, execute_job=True) |
+ try: |
+ old_version = c.GetVersion(dependency, platform) |
+ print 'Updating from version: {}'.format(old_version) |
+ except ValueError: |
+ raise RollError( |
+ ('binary_dependencies.json entry for {} missing or invalid; please add ' |
+ 'it first! (need download_path and path_within_archive)') |
+ .format(platform)) |
+ |
+ if path: |
+ c.AddCloudStorageDependencyUpdateJob( |
+ dependency, platform, path, version=version, execute_job=True) |
+ |
+def verify_dependency_entry(dependency): |
+ update_dependency(dependency, None, None) |
# Main |
def main(version): |
+ verify_dependency_entry('numpy') |
+ |
outdir = os.path.join(SCRIPT_DIR, 'lib') |
if os.path.exists(outdir): |
shutil.rmtree(outdir) |
@@ -48,12 +66,24 @@ def main(version): |
zip_result = None |
with sh.ScopedTempDir(): |
- virtualenv.create_environment('env') |
+ virtualenv.create_environment('env', site_packages=False) |
with sh.ScopedChangeDir('env'): |
- sh.CallProgram(['bin', 'pip'], 'install', 'numpy=={}'.format(version)) |
- root_dir = glob.glob(os.path.join('lib', 'python2.*', 'site-packages')) |
+ if os.path.isdir('bin'): # Linux/Mac |
+ bin_dir = 'bin' |
+ root_dir = glob.glob(os.path.join('lib', 'python2.*', 'site-packages')) |
+ elif os.path.isdir('Scripts'): # Windows |
+ bin_dir = 'Scripts' |
+ root_dir = glob.glob(os.path.join('Lib', 'site-packages')) |
+ else: |
+ raise RollError("Can't find the bin directory at bin/ or Scripts/") |
+ |
+ activate_this = os.path.join(bin_dir, 'activate_this.py') |
+ execfile(activate_this, dict(__file__=activate_this)) |
+ |
+ sh.CallProgram(['pip'], 'install', 'numpy=={}'.format(version)) |
if len(root_dir) != 1: |
- raise Exception('Expected one glob match, found ' + len(root_dir)) |
+ raise RollError( |
+ 'Expected one glob match, found {}'.format(len(root_dir))) |
root_dir = root_dir[0] |
print 'Zipping result...' |
zip_result = shutil.make_archive( |
@@ -64,7 +94,7 @@ def main(version): |
print 'Uploading zip...' |
update_dependency('numpy', zip_result, version) |
- print '''\ |
+ print '''\ |
Don't forget to run: |
$ GYP_DEFINES=fetch_telemetry_dependencies=1 \ |
bin/fetch_telemetry_binary_dependencies |
@@ -84,6 +114,6 @@ if __name__ == '__main__': |
os.chdir(SCRIPT_DIR) |
main(args.version) |
- except Exception as e: |
+ except RollError as e: |
print '{}: {}'.format(type(e).__name__, e.message) |
sys.exit(1) |