blob: edb72701eeb9cea5d4119216018aaf1c4c5a790e [file] [log] [blame]
Andy Doan8ff38f02012-02-20 16:32:37 -06001#!/usr/bin/python
2
Andy Doan1c6ef8b2012-04-23 12:28:50 -05003import cookielib
4import os
Andy Doan8ff38f02012-02-20 16:32:37 -06005import re
6import urllib2
Fathi Boudra75e299a2012-08-26 19:04:03 +03007import sys
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +02008import json
9import urlparse
10import snapshotsapi
Andy Doan8ff38f02012-02-20 16:32:37 -060011
Andy Doan1c6ef8b2012-04-23 12:28:50 -050012def cookie_setup():
13 cookies = os.getenv('LMC_COOKIES')
14 if cookies:
15 cj = cookielib.LWPCookieJar()
16 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
17 opener.addheaders.append(('Cookie', cookies))
18 urllib2.install_opener(opener)
19
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020020def list_links(url, regex=""):
Andy Doan81211902012-03-14 14:37:30 -050021 try:
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020022 api = snapshotsapi.ApiUrls(url)
23 response = urllib2.urlopen(api.ls())
24 listing = json.loads(response.read())["files"]
25 links = []
26 for file_info in listing:
27 # we do not care about /latest/ - we want numbers
28 if file_info["name"] == "latest":
29 continue
30
31 if regex == "" or re.match(regex, file_info["name"]):
32 # for folders we will dig deeper but not for files
33 if file_info["type"] == "folder":
34 links.append([int(file_info["name"]), file_info["url"]])
35 else:
36 links.append([file_info["name"], file_info["name"]])
37
Andy Doan81211902012-03-14 14:37:30 -050038 except urllib2.HTTPError,e:
Ricardo Salveti de Araujoba7dacf2012-06-23 01:08:24 -030039 print "ERROR: finding links for (%s): %s" % (url, e)
Andy Doan81211902012-03-14 14:37:30 -050040 links = [] #return empty array
Andy Doan8ff38f02012-02-20 16:32:37 -060041 return links
42
Andy Doan540a4b12012-04-17 11:48:11 -050043def list_hwpack(url):
44 ''' returns tuple of (buildate, url)
45 '''
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020046 urls = list_links(url, r'.*hwpack.*?\.tar\.gz')
Andy Doan5f20efb2012-03-29 21:35:16 -050047 for link in urls:
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -030048 try:
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020049 build_date = re.compile('_(\d+)-').findall(link[1])
50 return (build_date[0], '%s/%s' % (url,link[1]))
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -030051 except:
52 return None
Andy Doan540a4b12012-04-17 11:48:11 -050053 return None
Andy Doan8ff38f02012-02-20 16:32:37 -060054
55def latest_hwpacks(url, limit=7):
56 '''returns an array of tuples (build-date, hwpack url) like:
57 [ (20120210, http://foo.bar/hwpack.tar.gz), (20120209, blah.tar.gz) ]
58 '''
59 # only analyze the last few builds
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020060 links = list_links(url)
61 links = sorted(links, reverse=True)[:limit]
Andy Doan8ff38f02012-02-20 16:32:37 -060062 hwpacks = []
Andy Doan1c6ef8b2012-04-23 12:28:50 -050063 for link in links:
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020064 build = list_hwpack('%s/%s'% (url, link[0]))
Andy Doan540a4b12012-04-17 11:48:11 -050065 if build is not None:
66 hwpacks.append(build)
Andy Doan8ff38f02012-02-20 16:32:37 -060067 return hwpacks
68
Andy Doan5f20efb2012-03-29 21:35:16 -050069def list_rfs(url):
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020070 links = list_links(url, r'.*(?!config)(?:rootfs\.)?tar\.gz')
Marcin Juszkiewicz3b3eed62013-04-17 11:45:09 +020071 if len(links):
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020072 return "%s/%s" %(url,links[0][0])
Andy Doan5f20efb2012-03-29 21:35:16 -050073 return None
74
Andy Doan8ff38f02012-02-20 16:32:37 -060075def latest_rfs(url, limit=7):
76 '''
77 Returns a tuple of (builddate, url)
78 '''
79 # only analyze the last few builds
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020080 links = list_links(url)
81 links = sorted(links, reverse=True)[:limit]
Andy Doan1c6ef8b2012-04-23 12:28:50 -050082 for link in links:
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020083 build = list_rfs('%s/%s' %(url, link[0]))
Andy Doan540a4b12012-04-17 11:48:11 -050084 if build is not None:
Marcin Juszkiewiczc5832642013-04-02 14:39:14 +020085 return (link[0], build)
Andy Doan8ff38f02012-02-20 16:32:37 -060086
87 return None
88
89if __name__ == '__main__':
Andy Doan1c6ef8b2012-04-23 12:28:50 -050090 cookie_setup()
91
Andy Doan8ff38f02012-02-20 16:32:37 -060092 for arg in sys.argv[1:]:
93 print "HWPACKS for: %s" % arg
94 hwpacks = latest_hwpacks(arg, 4)
95 for hwpack in hwpacks:
96 print " %s: %s" % hwpack
97
98 print "latest nano:"
Fathi Boudraaa6cbf82013-12-09 20:46:04 +020099 print " %s %s" % latest_rfs('http://snapshots.linaro.org/ubuntu/images/nano')