Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | |
| 3 | import re |
| 4 | import urllib2 |
| 5 | |
| 6 | def list_links(url, regex=r'<a\s*href=[\'|"](.*?)[\'"].*?>'): |
Andy Doan | 8121190 | 2012-03-14 14:37:30 -0500 | [diff] [blame] | 7 | try: |
| 8 | response = urllib2.urlopen(url) |
| 9 | msg = response.read() |
| 10 | links = re.compile(regex).findall(msg) |
| 11 | except urllib2.HTTPError,e: |
| 12 | print "ERROR finding links for (%s): %s" % (url, e) |
| 13 | links = [] #return empty array |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 14 | return links |
| 15 | |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 16 | def list_hwpack(url): |
| 17 | ''' returns tuple of (buildate, url) |
| 18 | ''' |
Andy Doan | 5f20efb | 2012-03-29 21:35:16 -0500 | [diff] [blame] | 19 | urls = list_links(url, r'<a\s*href=[\'|"](hwpack.*?\.tar\.gz)[\'"].*?>') |
| 20 | for link in urls: |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 21 | build_date = re.compile('_(\d+)-').findall(link) |
| 22 | return (build_date[0], '%s/%s' % (url,link)) |
| 23 | return None |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 24 | |
| 25 | def latest_hwpacks(url, limit=7): |
| 26 | '''returns an array of tuples (build-date, hwpack url) like: |
| 27 | [ (20120210, http://foo.bar/hwpack.tar.gz), (20120209, blah.tar.gz) ] |
| 28 | ''' |
| 29 | # only analyze the last few builds |
| 30 | links = list_links(url, r'<a\s*href=[\'|"](\d+)\/[\'"].*?>')[:limit] |
| 31 | hwpacks = [] |
| 32 | for link in sorted(links, reverse=True): |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 33 | build = list_hwpack('%s/%s'% (url, link)) |
| 34 | if build is not None: |
| 35 | hwpacks.append(build) |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 36 | return hwpacks |
| 37 | |
Andy Doan | 5f20efb | 2012-03-29 21:35:16 -0500 | [diff] [blame] | 38 | def list_rfs(url): |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 39 | links = list_links(url, r'<a\s*href=[\'|"](linaro-.*?\d+(?!config)\.tar\.gz)[\'"].*?>') |
Andy Doan | 5f20efb | 2012-03-29 21:35:16 -0500 | [diff] [blame] | 40 | if len(links) is 1: |
| 41 | return "%s/%s" %(url,links[0]) |
| 42 | return None |
| 43 | |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 44 | def latest_rfs(url, limit=7): |
| 45 | ''' |
| 46 | Returns a tuple of (builddate, url) |
| 47 | ''' |
| 48 | # only analyze the last few builds |
| 49 | links = list_links(url, r'<a\s*href=[\'|"](\d+)\/[\'"].*?>')[:limit] |
Andy Doan | 1a0233a | 2012-04-23 11:23:14 -0500 | [diff] [blame] | 50 | for link in sorted(links, reverse=True, key=int): |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 51 | build = list_rfs('%s/%s' %(url, link)) |
| 52 | if build is not None: |
| 53 | return (link, build) |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 54 | |
| 55 | return None |
| 56 | |
| 57 | if __name__ == '__main__': |
| 58 | import sys |
| 59 | for arg in sys.argv[1:]: |
| 60 | print "HWPACKS for: %s" % arg |
| 61 | hwpacks = latest_hwpacks(arg, 4) |
| 62 | for hwpack in hwpacks: |
| 63 | print " %s: %s" % hwpack |
| 64 | |
| 65 | print "latest nano:" |
Andy Doan | 1a0233a | 2012-04-23 11:23:14 -0500 | [diff] [blame] | 66 | print " %s %s" % latest_rfs('http://snapshots.linaro.org/precise/images/nano') |