Merge lp:~deeptik/linaro-fetch-image/release-matrix into lp:linaro-fetch-image

Proposed by Deepti B. Kalakeri
Status: Merged
Merged at revision: 22
Proposed branch: lp:~deeptik/linaro-fetch-image/release-matrix
Merge into: lp:linaro-fetch-image
Diff against target: 222 lines (+132/-17)
2 files modified
linaro-fetch-image (+45/-15)
linaro_fetch_image/fetch_image.py (+87/-2)
To merge this branch: bzr merge lp:~deeptik/linaro-fetch-image/release-matrix
Reviewer Review Type Date Requested Status
James Tunnicliffe (community) Needs Fixing
Review via email: mp+129360@code.launchpad.net

Description of the change

Some useful command to get release list matrix, also modified l-i-f CLI to run l-m-c not just one but all the matching available platforms.

Next step is to be able to specify a list of platforms that we need to be able to build at one go.

To post a comment you must log in.
Revision history for this message
James Tunnicliffe (dooferlad) wrote :
Download full text (5.7 KiB)

Hi,

Thanks for the patch. There are a couple of minor problems and I have one larger suggestion, but nothing that will take long to fix. First, this section with dates is unneeded:

+ # We only need to look up a single snapshot date. We just use the
+ # latest in the database (we could use today and search from it, but
+ # the database is just one that is checked in, so it could be old
+ # and db.get_next_prev_day_with_builds may give up before finding it).
+ date = db.execute_return_list(
+ "SELECT MAX(date) FROM snapshot_binaries")[0][0]
+ d = re.search("(\d{4})(\d{2})(\d{2})", date)
+ date = (d.group(1) + "-" + d.group(2) + "-" + d.group(3))

The date variable was only used for snapshot lookup, not for release lookup.

+ # - Run the function under test! -

This comment is now wrong

+ image_url, hwpack_url = (
+ db.get_image_and_hwpack_urls(
+ self.settings))
+ temp_list.append(self.settings['platform'])
+ img_list[self.settings['image']].append(self.settings['platform'])
+ release_list[self.settings['hardware']] = img_list

Some of these lines are >80 characters wide. Since the function has a lot of indentation I suggest you move this section into its own function to make life easier:

+ # -- Check build which matches these parameters
+ #(builds that don't match are excluded in UI)--
+ if( len(db.execute_return_list(
+ 'select * from release_hwpacks '
+ 'where platform == ? '
+ 'and hardware == ? '
+ 'and build == ?',
+ (self.settings['platform'],
+ self.settings['hwpack'],
+ self.settings['build'])))
+ and len(db.execute_return_list(
+ 'select * from release_binaries '
+ 'where platform == ? '
+ 'and image == ? '
+ 'and build == ?',
+ (self.settings['platform'],
+ self.settings['image'],
+ self.settings['build'])))):
+
+ # - Run the function under test! -
+ image_url, hwpack_url = (
+ db.get_image_and_hwpack_urls(
+ self.settings))
+ temp_list.append(self.settings['platform'])...

Read more...

review: Needs Fixing
23. By Deepti B. Kalakeri

Adding --hwpack-force-yes command line option to l-f-i

24. By Deepti B. Kalakeri

Factoring into small functions, removing unneeded code

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'linaro-fetch-image'
2--- linaro-fetch-image 2012-10-10 15:42:01 +0000
3+++ linaro-fetch-image 2012-10-12 10:32:19 +0000
4@@ -24,6 +24,7 @@
5 import os
6 import linaro_fetch_image.fetch_image as fetch_image
7 import logging
8+import pprint
9
10
11 def main():
12@@ -38,8 +39,12 @@
13 force_download = ("--force-download" in sys.argv[1:]
14 or "-d" in sys.argv[1:])
15
16+ list_matrix = ("--list-matrix" in sys.argv[1:]
17+ or "-l" in sys.argv[1:])
18+
19 if clean_cache:
20 file_handler.clean_cache()
21+
22
23 # If the settings file and server index need updating, grab them
24 file_handler.update_files_from_server(force_download)
25@@ -50,32 +55,57 @@
26 db = fetch_image.DB(file_handler.index_file)
27 config.finish_config(db)
28
29+ # Get a list of release builds that are available for testing
30+ release_list = config.get_release_list(db, config.settings)
31+ if list_matrix:
32+ pp = pprint.PrettyPrinter(indent=4)
33+ pp.pprint(release_list)
34+ exit(0)
35+
36 # Using the settings that the YAML defines as what we need for a build,
37 # generate a command line parser and parse the command line
38 config.parse_args(sys.argv[1:])
39-
40 if config.args['platform'] == "snapshot":
41 config.args['release_or_snapshot'] = "snapshot"
42 else:
43 config.args['release_or_snapshot'] = "release"
44
45+
46+ # Get release builds for specific image type, for example nano
47+ platform_list = config.get_release_list_specific_to_image(release_list,
48+ config.args)
49 # Using the config we have, look up URLs to download data from in the
50 # server index
51-
52- image_url, hwpack_url = db.get_image_and_hwpack_urls(config.args)
53-
54- if(image_url and hwpack_url):
55- if config.args['exit']:
56- exit(0)
57- tools_dir = os.path.dirname(__file__)
58- if tools_dir == '':
59- tools_dir = None
60-
61- file_handler.create_media(image_url, hwpack_url,
62- config.args, tools_dir)
63+ if config.args['platform'] == 'all':
64+ for platform in platform_list:
65+ config.args['platform'] = platform
66+ image_url, hwpack_url = db.get_image_and_hwpack_urls(config.args)
67+ if(image_url and hwpack_url):
68+ if config.args['exit']:
69+ exit(0)
70+ tools_dir = os.path.dirname(__file__)
71+ if tools_dir == '':
72+ tools_dir = None
73+ file_handler.create_media(image_url, hwpack_url,
74+ config.args, tools_dir)
75+ else:
76+ logging.error("Unable to find files that match the '%s' " \
77+ "release", platform)
78 else:
79- logging.error(
80- "Unable to find files that match the parameters specified")
81+ image_url, hwpack_url = db.get_image_and_hwpack_urls(config.args)
82+
83+ if(image_url and hwpack_url):
84+ if config.args['exit']:
85+ exit(0)
86+ tools_dir = os.path.dirname(__file__)
87+ if tools_dir == '':
88+ tools_dir = None
89+
90+ file_handler.create_media(image_url, hwpack_url,
91+ config.args, tools_dir)
92+ else:
93+ logging.error(
94+ "Unable to find files that match the parameters specified")
95 exit(1)
96
97 if __name__ == '__main__':
98
99=== modified file 'linaro_fetch_image/fetch_image.py'
100--- linaro_fetch_image/fetch_image.py 2012-10-10 15:42:01 +0000
101+++ linaro_fetch_image/fetch_image.py 2012-10-12 10:32:19 +0000
102@@ -583,7 +583,7 @@
103 if run_in_gui:
104 args.append("--nocheck-mmc")
105
106- if hwpack_verified:
107+ if hwpack_verified or settings['hwpack_force_yes']:
108 # We verify the hwpack before calling linaro-media-create because
109 # these tools run linaro-media-create as root and to get the GPG
110 # signature verification to work, root would need to have GPG set
111@@ -642,7 +642,6 @@
112 settings,
113 tools_dir,
114 hwpack_verified)
115-
116 self.create_process = subprocess.Popen(lmc_command)
117 self.create_process.wait()
118
119@@ -883,6 +882,12 @@
120 parser.add_argument("-d", "--force-download",
121 help="Force re-downloading of cached files",
122 action='store_true')
123+ parser.add_argument("-l", "--list-matrix", action='store_true',
124+ help="List available board/image/platform release"\
125+ "matrix")
126+ parser.add_argument("-y", "--hwpack-force-yes",
127+ help="Force install packages without verification",
128+ action='store_true')
129 parser.add_argument(
130 "-t", "--image-file",
131 help="Where to write image file to (use this XOR mmc)")
132@@ -944,6 +949,85 @@
133 for image in sorted(self.settings['choice']['image']):
134 print image,
135
136+ def get_release_list(self, db, config):
137+ release_list = {}
138+ self.settings = config
139+
140+ #--- Now test release build lookup ---
141+ self.settings['release_or_snapshot'] = "release"
142+ # -- Select hardware --
143+ for self.settings['hardware'] in (
144+ self.settings['choice']['hardware'].keys()):
145+ compatable_hwpacks = (
146+ self.settings['choice']['hwpack'][self.settings['hardware']])
147+ # -- Iterate through hardware packs --
148+ for self.settings['hwpack'] in compatable_hwpacks:
149+ # If hardware pack is available...
150+ if(self.settings['hwpack']
151+ in db.get_hwpacks('release_hwpacks')):
152+
153+ # -- Iterate through images
154+ os_list = db.get_os_list_from('release_binaries')
155+ img_list = {}
156+ for self.settings['image'] in os_list:
157+ if re.search('old', self.settings['image']):
158+ # Directories with old in the name are of no
159+ # interest to us
160+ continue
161+ img_list[self.settings['image']] = []
162+ release_list[self.settings['hardware']] = img_list
163+ for platform, ignore in (
164+ self.settings['choice']['platform'].items()):
165+ self.settings['platform'] = platform
166+ # -- Iterate through available builds --
167+ builds = db.get_builds(
168+ self.settings['platform'],
169+ self.settings['image'])
170+ for build in builds:
171+ self.settings['build'] = build
172+ self.update_release_list(db, release_list, img_list)
173+
174+
175+ return release_list
176+
177+ def update_release_list(self, db, release_list, img_list):
178+ temp_list = []
179+ # -- Check build which matches these parameters
180+ #(builds that don't match are excluded)--
181+ if( len(db.execute_return_list(
182+ 'select * from release_hwpacks '
183+ 'where platform == ? '
184+ 'and hardware == ? '
185+ 'and build == ?',
186+ (self.settings['platform'],
187+ self.settings['hwpack'],
188+ self.settings['build'])))
189+ and len(db.execute_return_list(
190+ 'select * from release_binaries '
191+ 'where platform == ? '
192+ 'and image == ? '
193+ 'and build == ?',
194+ (self.settings['platform'],
195+ self.settings['image'],
196+ self.settings['build'])))):
197+
198+ image_url, hwpack_url = (
199+ db.get_image_and_hwpack_urls(
200+ self.settings))
201+ temp_list.append(self.settings['platform'])
202+ img_list[self.settings['image']].append(self.settings['platform'])
203+ release_list[self.settings['hardware']] = img_list
204+
205+ def get_release_list_specific_to_image(self, release_list, config_args):
206+ hardware = config_args['hardware']
207+ image = config_args['image']
208+ if hardware in release_list.keys():
209+ if image in release_list[hardware].keys():
210+ return release_list[hardware][image]
211+ else:
212+ return None
213+
214+ return None
215
216 class DB():
217 """Interacts with the database storing URLs of files that are available
218@@ -1674,3 +1758,4 @@
219 logging.error(msg)
220
221 return(image_url[0], hwpack_url[0])
222+

Subscribers

People subscribed via source and target branches