diff options
author | Cristiana Voicu <cristiana.voicu@intel.com> | 2013-01-25 16:10:12 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-01-31 12:46:19 +0000 |
commit | f0aef9953d3504e673c8572f1ae64cefdf678b0f (patch) | |
tree | 51ff6cfd3d4d307074eb5ffd9956ee177c75717c /bitbake/lib/bb/cooker.py | |
parent | 33c6c411ea7ada066122b758b05abf7472ca0a16 (diff) | |
download | poky-f0aef9953d3504e673c8572f1ae64cefdf678b0f.tar.gz |
bitbake: bitbake & hob: implement functions to assure consistency for configuration files
Added a new command in bitbake to save a variable in a file; added a function
in cooker which is called by this command.
Added new command in bitbake to enable/disable data tracking.
The function saveConfigurationVar from cooker.py saves a variable in the file that
is received by argument. It checks all the operations made on that variable, using the history.
If it's the first time when it does some changes on a variable,it comments the lines where
an operation is made on it, and it sets it in a line to the end of file. If it's not
the first time(it has a comment before), it replaces the line.
Made some changes in hob to save the variables from bblayers.conf and local.conf
using the bitbake command.
[YOCTO #2934]
(Bitbake rev: 55b814ccfa413d461d12956896364ab63eed70a8)
Signed-off-by: Cristiana Voicu <cristiana.voicu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 80710fb97d..34fbfb0701 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -186,6 +186,12 @@ class BBCooker: | |||
186 | filtered_keys = bb.utils.approved_variables() | 186 | filtered_keys = bb.utils.approved_variables() |
187 | bb.data.inheritFromOS(self.configuration.data, self.savedenv, filtered_keys) | 187 | bb.data.inheritFromOS(self.configuration.data, self.savedenv, filtered_keys) |
188 | 188 | ||
189 | def enableDataTracking(self): | ||
190 | self.configuration.data.enableTracking() | ||
191 | |||
192 | def disableDataTracking(self): | ||
193 | self.configuration.data.disableTracking() | ||
194 | |||
189 | def loadConfigurationData(self): | 195 | def loadConfigurationData(self): |
190 | self.initConfigurationData() | 196 | self.initConfigurationData() |
191 | 197 | ||
@@ -201,6 +207,89 @@ class BBCooker: | |||
201 | if not self.configuration.cmd: | 207 | if not self.configuration.cmd: |
202 | self.configuration.cmd = self.configuration.data.getVar("BB_DEFAULT_TASK", True) or "build" | 208 | self.configuration.cmd = self.configuration.data.getVar("BB_DEFAULT_TASK", True) or "build" |
203 | 209 | ||
210 | def saveConfigurationVar(self, var, val, default_file): | ||
211 | |||
212 | replaced = False | ||
213 | #do not save if nothing changed | ||
214 | if str(val) == self.configuration.data.getVar(var): | ||
215 | return | ||
216 | |||
217 | conf_files = self.configuration.data.varhistory.get_variable_files(var) | ||
218 | |||
219 | #format the value when it is a list | ||
220 | if isinstance(val, list): | ||
221 | listval = "" | ||
222 | for value in val: | ||
223 | listval += "%s " % value | ||
224 | val = listval | ||
225 | |||
226 | topdir = self.configuration.data.getVar("TOPDIR") | ||
227 | |||
228 | #comment or replace operations made on var | ||
229 | for conf_file in conf_files: | ||
230 | if topdir in conf_file: | ||
231 | with open(conf_file, 'r') as f: | ||
232 | contents = f.readlines() | ||
233 | f.close() | ||
234 | |||
235 | lines = self.configuration.data.varhistory.get_variable_lines(var, conf_file) | ||
236 | for line in lines: | ||
237 | total = "" | ||
238 | i = 0 | ||
239 | for c in contents: | ||
240 | total += c | ||
241 | i = i + 1 | ||
242 | if i==int(line): | ||
243 | end_index = len(total) | ||
244 | index = total.rfind(var, 0, end_index) | ||
245 | |||
246 | begin_line = total.count("\n",0,index) | ||
247 | end_line = int(line) | ||
248 | |||
249 | #check if the variable was saved before in the same way | ||
250 | #if true it replace the place where the variable was declared | ||
251 | #else it comments it | ||
252 | if contents[begin_line-1]== "#added by bitbake\n": | ||
253 | contents[begin_line] = "%s = \"%s\"\n" % (var, val) | ||
254 | replaced = True | ||
255 | else: | ||
256 | for ii in range(begin_line, end_line): | ||
257 | contents[ii] = "#" + contents[ii] | ||
258 | |||
259 | total = "" | ||
260 | for c in contents: | ||
261 | total += c | ||
262 | with open(conf_file, 'w') as f: | ||
263 | f.write(total) | ||
264 | f.close() | ||
265 | |||
266 | if replaced == False: | ||
267 | #remove var from history | ||
268 | self.configuration.data.varhistory.del_var_history(var) | ||
269 | |||
270 | #add var to the end of default_file | ||
271 | default_file = self._findConfigFile(default_file) | ||
272 | |||
273 | with open(default_file, 'r') as f: | ||
274 | contents = f.readlines() | ||
275 | f.close() | ||
276 | |||
277 | total = "" | ||
278 | for c in contents: | ||
279 | total += c | ||
280 | |||
281 | #add the variable on a single line, to be easy to replace the second time | ||
282 | total += "#added by bitbake" | ||
283 | total += "\n%s = \"%s\"\n" % (var, val) | ||
284 | |||
285 | with open(default_file, 'w') as f: | ||
286 | f.write(total) | ||
287 | f.close() | ||
288 | |||
289 | #add to history | ||
290 | loginfo = {"op":set, "file":default_file, "line":total.count("\n")} | ||
291 | self.configuration.data.setVar(var, val, **loginfo) | ||
292 | |||
204 | def parseConfiguration(self): | 293 | def parseConfiguration(self): |
205 | 294 | ||
206 | # Set log file verbosity | 295 | # Set log file verbosity |