#!/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)