Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | |
Andy Doan | 1c6ef8b | 2012-04-23 12:28:50 -0500 | [diff] [blame] | 3 | import cookielib |
| 4 | import os |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 5 | import re |
| 6 | import urllib2 |
Fathi Boudra | 75e299a | 2012-08-26 19:04:03 +0300 | [diff] [blame] | 7 | import sys |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 8 | |
Andy Doan | 1c6ef8b | 2012-04-23 12:28:50 -0500 | [diff] [blame] | 9 | def cookie_setup(): |
| 10 | cookies = os.getenv('LMC_COOKIES') |
| 11 | if cookies: |
| 12 | cj = cookielib.LWPCookieJar() |
| 13 | opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) |
| 14 | opener.addheaders.append(('Cookie', cookies)) |
| 15 | urllib2.install_opener(opener) |
| 16 | |
Fathi Boudra | 26f990b | 2012-08-27 19:00:01 +0300 | [diff] [blame] | 17 | def list_links(url, regex=r'<a\s*href=[\'"].*[\'"]>(.*)/?</a>'): |
Andy Doan | 8121190 | 2012-03-14 14:37:30 -0500 | [diff] [blame] | 18 | try: |
| 19 | response = urllib2.urlopen(url) |
| 20 | msg = response.read() |
| 21 | links = re.compile(regex).findall(msg) |
| 22 | except urllib2.HTTPError,e: |
Ricardo Salveti de Araujo | ba7dacf | 2012-06-23 01:08:24 -0300 | [diff] [blame] | 23 | print "ERROR: finding links for (%s): %s" % (url, e) |
Andy Doan | 8121190 | 2012-03-14 14:37:30 -0500 | [diff] [blame] | 24 | links = [] #return empty array |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 25 | return links |
| 26 | |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 27 | def list_hwpack(url): |
| 28 | ''' returns tuple of (buildate, url) |
| 29 | ''' |
Fathi Boudra | 26f990b | 2012-08-27 19:00:01 +0300 | [diff] [blame] | 30 | urls = list_links(url, r'<a\s*href=[\'|"].*[\'"]>(hwpack.*?\.tar\.gz)</a>') |
Andy Doan | 5f20efb | 2012-03-29 21:35:16 -0500 | [diff] [blame] | 31 | for link in urls: |
Ricardo Salveti de Araujo | 688f24f | 2012-10-17 02:40:36 -0300 | [diff] [blame] | 32 | try: |
| 33 | build_date = re.compile('_(\d+)-').findall(link) |
| 34 | return (build_date[0], '%s/%s' % (url,link)) |
| 35 | except: |
| 36 | return None |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 37 | return None |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 38 | |
| 39 | def latest_hwpacks(url, limit=7): |
| 40 | '''returns an array of tuples (build-date, hwpack url) like: |
| 41 | [ (20120210, http://foo.bar/hwpack.tar.gz), (20120209, blah.tar.gz) ] |
| 42 | ''' |
| 43 | # only analyze the last few builds |
Fathi Boudra | 26f990b | 2012-08-27 19:00:01 +0300 | [diff] [blame] | 44 | links = list_links(url, r'<a\s*href=[\'|"].*[\'"]>(\d+)/?</a>') |
Andy Doan | 1c6ef8b | 2012-04-23 12:28:50 -0500 | [diff] [blame] | 45 | links = sorted(links, reverse=True, key=int)[:limit] |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 46 | hwpacks = [] |
Andy Doan | 1c6ef8b | 2012-04-23 12:28:50 -0500 | [diff] [blame] | 47 | for link in links: |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 48 | build = list_hwpack('%s/%s'% (url, link)) |
| 49 | if build is not None: |
| 50 | hwpacks.append(build) |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 51 | return hwpacks |
| 52 | |
Andy Doan | 5f20efb | 2012-03-29 21:35:16 -0500 | [diff] [blame] | 53 | def list_rfs(url): |
Ricardo Salveti de Araujo | fc9dde7 | 2012-10-18 04:24:59 -0300 | [diff] [blame] | 54 | links = list_links(url, |
| 55 | r'<a\s*href=[\'|"].*[\'"]>(.*\-\d+\.(?!config)(?:rootfs\.)?tar\.gz)</a>') |
Andy Doan | 5f20efb | 2012-03-29 21:35:16 -0500 | [diff] [blame] | 56 | if len(links) is 1: |
| 57 | return "%s/%s" %(url,links[0]) |
| 58 | return None |
| 59 | |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 60 | def latest_rfs(url, limit=7): |
| 61 | ''' |
| 62 | Returns a tuple of (builddate, url) |
| 63 | ''' |
| 64 | # only analyze the last few builds |
Fathi Boudra | 26f990b | 2012-08-27 19:00:01 +0300 | [diff] [blame] | 65 | links = list_links(url, r'<a\s*href=[\'"].*[\'"]>(\d+)/?</a>') |
Andy Doan | 1c6ef8b | 2012-04-23 12:28:50 -0500 | [diff] [blame] | 66 | links = sorted(links, reverse=True, key=int)[:limit] |
| 67 | for link in links: |
Andy Doan | 540a4b1 | 2012-04-17 11:48:11 -0500 | [diff] [blame] | 68 | build = list_rfs('%s/%s' %(url, link)) |
| 69 | if build is not None: |
| 70 | return (link, build) |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 71 | |
| 72 | return None |
| 73 | |
| 74 | if __name__ == '__main__': |
Andy Doan | 1c6ef8b | 2012-04-23 12:28:50 -0500 | [diff] [blame] | 75 | cookie_setup() |
| 76 | |
Andy Doan | 8ff38f0 | 2012-02-20 16:32:37 -0600 | [diff] [blame] | 77 | for arg in sys.argv[1:]: |
| 78 | print "HWPACKS for: %s" % arg |
| 79 | hwpacks = latest_hwpacks(arg, 4) |
| 80 | for hwpack in hwpacks: |
| 81 | print " %s: %s" % hwpack |
| 82 | |
| 83 | print "latest nano:" |
Fathi Boudra | 684e5e4 | 2012-11-30 04:19:33 +0100 | [diff] [blame^] | 84 | print " %s %s" % latest_rfs('http://snapshots.linaro.org/quantal/images/nano') |