summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristiana Voicu <cristiana.voicu@intel.com>2013-10-04 16:19:45 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-10-04 14:35:09 +0100
commitbd720fb63cef6b399619b8fbcaeb8d7710f2d6df (patch)
tree64822e20dc247734f3cf8e2e369d7144dd86d669
parent2d0ec8ff083b636a6cf98de3278900eb95c3def6 (diff)
downloadbitbake-bd720fb63cef6b399619b8fbcaeb8d7710f2d6df.tar.gz
bitbake/hob: removing extra parameters from conf files using hob
In Hob settings, there is a tab to add/remove extra settings. This patch implements a way to "remove" variables from conf files, through bitbake. But, to keep the history assigment of the variables synchronized, instead of removing, it replaces the lines with blank lines. [YOCTO #5284] Signed-off-by: Cristiana Voicu <cristiana.voicu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/command.py7
-rw-r--r--lib/bb/cooker.py38
-rw-r--r--lib/bb/data_smart.py8
-rwxr-xr-xlib/bb/ui/crumbs/builder.py2
-rw-r--r--lib/bb/ui/crumbs/hobeventhandler.py17
5 files changed, 69 insertions, 3 deletions
diff --git a/lib/bb/command.py b/lib/bb/command.py
index 21a6de0f6..3ca27a69e 100644
--- a/lib/bb/command.py
+++ b/lib/bb/command.py
@@ -241,6 +241,13 @@ class CommandsSync:
op = params[3]
command.cooker.modifyConfigurationVar(var, val, default_file, op)
+ def removeVarFile(self, command, params):
+ """
+ Remove a variable declaration from a file
+ """
+ var = params[0]
+ command.cooker.removeConfigurationVar(var)
+
def createConfigFile(self, command, params):
"""
Create an extra configuration file
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index ce7ca43d2..d17716d39 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -304,6 +304,44 @@ class BBCooker:
loginfo = {"op":set, "file":default_file, "line":total.count("\n")}
self.data.setVar(var, val, **loginfo)
+ def removeConfigurationVar(self, var):
+ conf_files = self.data.varhistory.get_variable_files(var)
+ topdir = self.data.getVar("TOPDIR")
+
+ for conf_file in conf_files:
+ if topdir in conf_file:
+ with open(conf_file, 'r') as f:
+ contents = f.readlines()
+ f.close()
+
+ lines = self.data.varhistory.get_variable_lines(var, conf_file)
+ for line in lines:
+ total = ""
+ i = 0
+ for c in contents:
+ total += c
+ i = i + 1
+ if i==int(line):
+ end_index = len(total)
+ index = total.rfind(var, 0, end_index)
+
+ begin_line = total.count("\n",0,index)
+
+ #check if the variable was saved before in the same way
+ if contents[begin_line-1]== "#added by bitbake\n":
+ contents[begin_line-1] = contents[begin_line] = "\n"
+ else:
+ contents[begin_line] = "\n"
+ #remove var from history
+ self.data.varhistory.del_var_history(var, conf_file, line)
+
+ total = ""
+ for c in contents:
+ total += c
+ with open(conf_file, 'w') as f:
+ f.write(total)
+ f.close()
+
def createConfigFile(self, name):
path = os.getcwd()
confpath = os.path.join(path, "conf", name)
diff --git a/lib/bb/data_smart.py b/lib/bb/data_smart.py
index b6f5b78cd..a1cbaba62 100644
--- a/lib/bb/data_smart.py
+++ b/lib/bb/data_smart.py
@@ -281,9 +281,13 @@ class VariableHistory(object):
lines.append(line)
return lines
- def del_var_history(self, var):
+ def del_var_history(self, var, f=None, line=None):
+ """If file f and line are not given, the entire history of var is deleted"""
if var in self.variables:
- self.variables[var] = []
+ if f and line:
+ self.variables[var] = [ x for x in self.variables[var] if x['file']!=f and x['line']!=line]
+ else:
+ self.variables[var] = []
class DataSmart(MutableMapping):
def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ):
diff --git a/lib/bb/ui/crumbs/builder.py b/lib/bb/ui/crumbs/builder.py
index 46023cc58..ab6750b74 100755
--- a/lib/bb/ui/crumbs/builder.py
+++ b/lib/bb/ui/crumbs/builder.py
@@ -218,7 +218,7 @@ class Configuration:
handler.set_var_in_file("SDKMACHINE", self.curr_sdk_machine, "local.conf")
handler.set_var_in_file("CONF_VERSION", self.conf_version, "local.conf")
handler.set_var_in_file("LCONF_VERSION", self.lconf_version, "bblayers.conf")
- handler.set_var_in_file("EXTRA_SETTING", self.extra_setting, "local.conf")
+ handler.set_extra_config(self.extra_setting)
handler.set_var_in_file("TOOLCHAIN_BUILD", self.toolchain_build, "local.conf")
handler.set_var_in_file("IMAGE_FSTYPES", self.image_fstypes, "local.conf")
if not defaults:
diff --git a/lib/bb/ui/crumbs/hobeventhandler.py b/lib/bb/ui/crumbs/hobeventhandler.py
index 3f5bebaca..393c258e4 100644
--- a/lib/bb/ui/crumbs/hobeventhandler.py
+++ b/lib/bb/ui/crumbs/hobeventhandler.py
@@ -21,6 +21,7 @@
import gobject
import logging
+import ast
from bb.ui.crumbs.runningbuild import RunningBuild
class HobHandler(gobject.GObject):
@@ -357,7 +358,20 @@ class HobHandler(gobject.GObject):
def set_incompatible_license(self, incompat_license):
self.set_var_in_file("INCOMPATIBLE_LICENSE", incompat_license, "local.conf")
+ def set_extra_setting(self, extra_setting):
+ self.set_var_in_file("EXTRA_SETTING", extra_setting, "local.conf")
+
def set_extra_config(self, extra_setting):
+ old_extra_setting = ast.literal_eval(self.runCommand(["getVariable", "EXTRA_SETTING"]) or "{}")
+ if extra_setting:
+ self.set_var_in_file("EXTRA_SETTING", extra_setting, "local.conf")
+ else:
+ self.remove_var_from_file("EXTRA_SETTING")
+
+ #remove not needed settings from conf
+ for key in old_extra_setting:
+ if key not in extra_setting:
+ self.remove_var_from_file(key)
for key in extra_setting.keys():
value = extra_setting[key]
self.set_var_in_file(key, value, "local.conf")
@@ -477,6 +491,9 @@ class HobHandler(gobject.GObject):
self.server.runCommand(["setVarFile", var, val, default_file, "earlyAssign"])
self.runCommand(["disableDataTracking"])
+ def remove_var_from_file(self, var):
+ self.server.runCommand(["removeVarFile", var])
+
def append_var_in_file(self, var, val, default_file=None):
self.server.runCommand(["setVarFile", var, val, default_file, "append"])