summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/cooker.py
diff options
context:
space:
mode:
authorCristiana Voicu <cristiana.voicu@intel.com>2013-01-25 16:10:12 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-01-31 12:46:19 +0000
commitf0aef9953d3504e673c8572f1ae64cefdf678b0f (patch)
tree51ff6cfd3d4d307074eb5ffd9956ee177c75717c /bitbake/lib/bb/cooker.py
parent33c6c411ea7ada066122b758b05abf7472ca0a16 (diff)
downloadpoky-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.py89
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