diff options
Diffstat (limited to 'src/mongo/gotools/binaryurl.py')
-rw-r--r-- | src/mongo/gotools/binaryurl.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/mongo/gotools/binaryurl.py b/src/mongo/gotools/binaryurl.py new file mode 100644 index 00000000000..45a5a170542 --- /dev/null +++ b/src/mongo/gotools/binaryurl.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +""" +Command line utility returns the URL of the most recent archive file +satisfying given version, edition, and operating system requirements. +""" + +import argparse +import json +import sys +import urllib2 + +url_current = "http://downloads.mongodb.org/current.json" +url_full = "http://downloads.mongodb.org/full.json" + +parser = argparse.ArgumentParser() +parser.add_argument("--edition", help="edition of MongoDB to use (e.g. 'targeted', 'enterprise'); defaults to 'base'") +parser.add_argument("--target", help="system in use (e.g. 'ubuntu1204', 'windows_x86_64-2008plus-ssl', 'rhel71')") +parser.add_argument("--version", help="version branch (e.g. '2.6', '3.2.8-rc1', 'latest')") +opts = parser.parse_args() + +if not opts.edition: + opts.edition = "base" +if not opts.target: + sys.exit("must specify target") +if not opts.version: + sys.exit("must specify version") + +# prior to the 2.6 branch, the enterprise edition was called 'subscription' +if opts.version == "2.4" and opts.edition == "enterprise": + opts.edition = "subscription" + +def isCorrectVersion(version): + if not "-rc" in opts.version and version["release_candidate"]: + return False + actual = version["version"].split(".") + desired = opts.version.split(".") + for i in range(len(desired)): + if desired[i] and not actual[i] == desired[i]: + return False + return True + +def isCorrectDownload(download): + return download["edition"] == opts.edition and download["target"] == opts.target + +def locateUrl(specs, override): + versions = specs["versions"] + if not override: + versions = filter(isCorrectVersion, versions) + for item in versions: + downloads = filter(isCorrectDownload, item["downloads"]) + urls = map(lambda download : download["archive"]["url"], downloads) + if len(urls) > 0: + if override: + return urls[0].replace(item["version"], override) + return urls[0] + +override = "latest" if opts.version == "latest" else None + +specs = json.load(urllib2.urlopen(url_current)) +url = locateUrl(specs, override) + +if not url: + specs = json.load(urllib2.urlopen(url_full)) + url = locateUrl(specs, override) + +if not url: + sys.exit("No info for version "+opts.version+" found") + +sys.stdout.write(url) |