#!/usr/bin/python # # Copyright 2013 Google Inc. All Rights Reserved. """Script to find list of common images (first beta releases) in Chromeos. Display information about stable ChromeOS/Chrome versions to be used by the team developers. The purpose is to increase team productivity by using stable (known and tested) ChromeOS/Chrome versions instead of using randomly selected versions. Currently we define as a "stable" version the first Beta release in a particular release cycle. """ __author__ = "llozano@google.com (Luis Lozano)" import optparse import pickle import re import sys import urllib VERSIONS_HISTORY_URL = "http://cros-omahaproxy.appspot.com/history" def DisplayBetas(betas): print "List of betas from", VERSIONS_HISTORY_URL for beta in betas: print " Release", beta["chrome_major_version"], beta return def FindAllBetas(all_versions): """Get ChromeOS first betas from History URL.""" all_betas = [] prev_beta = {} for line in all_versions: match_obj = re.match( r"(?P.*),(?P.*)," r"(?P\d*).(?P.*)," r"(?P.*),beta-channel,,Samsung Chromebook Series 5 550", line) if match_obj: if prev_beta: if (prev_beta["chrome_major_version"] != match_obj.group("chrome_major_version")): all_betas.append(prev_beta) prev_beta = match_obj.groupdict() if prev_beta: all_betas.append(prev_beta) return all_betas def SerializeBetas(all_betas, serialize_file): with open(serialize_file, "wb") as f: pickle.dump(all_betas, f) print "Serialized list of betas into", serialize_file return def Main(argv): """Get ChromeOS first betas list from history URL.""" parser = optparse.OptionParser() parser.add_option("--serialize", dest="serialize", default=None, help="Save list of common images into the specified file.") options = parser.parse_args(argv)[0] try: opener = urllib.URLopener() all_versions = opener.open(VERSIONS_HISTORY_URL) except IOError as ioe: print "Cannot open", VERSIONS_HISTORY_URL print ioe return 1 all_betas = FindAllBetas(all_versions) DisplayBetas(all_betas) if options.serialize: SerializeBetas(all_betas, options.serialize) all_versions.close() return 0 if __name__ == "__main__": retval = Main(sys.argv) sys.exit(retval)