summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/binaryurl.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/binaryurl.py')
-rw-r--r--src/mongo/gotools/binaryurl.py70
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)