diff --git a/dev-tools/get-bwc-version.py b/dev-tools/get-bwc-version.py new file mode 100644 index 00000000000..7db17b99c17 --- /dev/null +++ b/dev-tools/get-bwc-version.py @@ -0,0 +1,83 @@ +# Licensed to Elasticsearch under one or more contributor +# license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright +# ownership. Elasticsearch licenses this file to you under +# the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on +# an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +# either express or implied. See the License for the specific +# language governing permissions and limitations under the License. + +''' +Downloads and extracts elasticsearch for backwards compatibility tests. +''' + +import argparse +import os +import platform +import shutil +import subprocess +import urllib.request +import zipfile + +def parse_config(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--path', metavar='DIR', default='./backwards', + help='Where to extract elasticsearch') + parser.add_argument('--force', action='store_true', default=False, + help='Delete and redownload if the version already exists') + parser.add_argument('version', metavar='X.Y.Z', + help='Version of elasticsearch to grab') + return parser.parse_args() + +def main(): + c = parse_config() + + if not os.path.exists(c.path): + print('Creating %s' % c.path) + os.mkdir(c.path) + + is_windows = platform.system() == 'Windows' + + os.chdir(c.path) + version_dir = 'elasticsearch-%s' % c.version + if os.path.exists(version_dir): + if c.force: + print('Removing old download %s' % version_dir) + shutil.rmtree(version_dir) + else: + print('Version %s exists at %s' % (c.version, version_dir)) + return + + # before 1.4.0, the zip file contains windows scripts, and tar.gz contained *nix scripts + if is_windows: + filename = '%s.zip' % version_dir + else: + filename = '%s.tar.gz' % version_dir + + url = 'https://download.elasticsearch.org/elasticsearch/elasticsearch/%s' % filename + print('Downloading %s' % url) + urllib.request.urlretrieve(url, filename) + + print('Extracting to %s' % version_dir) + if is_windows: + archive = zipfile.ZipFile(filename) + archive.extractall() + else: + # for some reason python's tarfile module has trouble with ES tgz? + subprocess.check_call('tar -xzf %s' % filename, shell=True) + + print('Cleaning up %s' % filename) + os.remove(filename) + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + print('Ctrl-C caught, exiting')