All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file
@ 2016-08-23  9:44 Jérémy Rosen
  2016-08-23  9:44 ` [PATCH v2 1/1] add a syntax to clear variable Jérémy Rosen
  2016-09-06 10:44 ` [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file Jérémy Rosen
  0 siblings, 2 replies; 5+ messages in thread
From: Jérémy Rosen @ 2016-08-23  9:44 UTC (permalink / raw)
  To: bitbake-devel

While working on a Yocto project I had a need to reactivate a task that was
disabled (do_fetch[noexec]="1") Currently, bitbake does not check the value
of the noexec flag but only if the flag is set. The only way to unset a flag
is to use an inline python syntax like the one below

python () {
   d.delVarFlag("do_fetch","noexec")
}

Using inline python to do something as simple as clearing a flag sounded too
complicated to me so I added a new keyword "unset" to bitbake with the
following syntax :

unset VAR

will call d.delVar("VAR")

unset VAR[flag]

will call d.delVarFlag("VAR","flag")

Documentation has been updated accordingly

---
v2 : fix some wording in documentation
     add unit test

Jérémy Rosen (1):
  add a syntax to clear variable

 bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml | 17 ++++-
 bitbake/lib/bb/parse/ast.py                                      | 33 +++++++-
 bitbake/lib/bb/parse/parse_py/ConfHandler.py                     | 12 +++-
 bitbake/lib/bb/tests/parse.py                                    | 17 ++++-
 4 files changed, 79 insertions(+), 0 deletions(-)

-- 
git-series 0.8.9


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/1] add a syntax to clear variable
  2016-08-23  9:44 [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file Jérémy Rosen
@ 2016-08-23  9:44 ` Jérémy Rosen
  2016-09-06 10:44 ` [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file Jérémy Rosen
  1 sibling, 0 replies; 5+ messages in thread
From: Jérémy Rosen @ 2016-08-23  9:44 UTC (permalink / raw)
  To: bitbake-devel; +Cc: Jérémy Rosen

unset VAR
will clear variable VAR
unset VAR[flag]
will clear flag "flag" from var VAR

Signed-off-by: Jérémy Rosen <jeremy.rosen@openwide.fr>
---
 bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml | 17 ++++-
 bitbake/lib/bb/parse/ast.py                                      | 33 +++++++-
 bitbake/lib/bb/parse/parse_py/ConfHandler.py                     | 12 +++-
 bitbake/lib/bb/tests/parse.py                                    | 17 ++++-
 4 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml
index 7ef848f..47db85b 100644
--- a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml
+++ b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml
@@ -431,6 +431,23 @@
             </para>
         </section>
 
+        <section id='unsetting-variables'>
+            <title>Unseting variables</title>
+
+            <para>
+                It is possible to completely remove a variable or a variable flag 
+                from BitBake's internal data dictionary by using the "unset" keyword.
+                Here is an example:
+                <literallayout class='monospaced'>
+        unset DATE
+        unset do_fetch[noexec]
+                </literallayout>
+                These two statements remove the <filename>DATE</filename> and the 
+                <filename>do_fetch[noexec]</filename> flag.
+            </para>
+
+        </section>
+
         <section id='providing-pathnames'>
             <title>Providing Pathnames</title>
 
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
index 8b9baa7..b407b09 100644
--- a/bitbake/lib/bb/parse/ast.py
+++ b/bitbake/lib/bb/parse/ast.py
@@ -69,6 +69,33 @@ class ExportNode(AstNode):
     def eval(self, data):
         data.setVarFlag(self.var, "export", 1, op = 'exported')
 
+class UnsetNode(AstNode):
+    def __init__(self, filename, lineno, var):
+        AstNode.__init__(self, filename, lineno)
+        self.var = var
+
+    def eval(self, data):
+        loginfo = {
+            'variable': self.var,
+            'file': self.filename,
+            'line': self.lineno,
+        }
+        data.delVar(self.var,**loginfo)
+
+class UnsetFlagNode(AstNode):
+    def __init__(self, filename, lineno, var, flag):
+        AstNode.__init__(self, filename, lineno)
+        self.var = var
+        self.flag = flag
+
+    def eval(self, data):
+        loginfo = {
+            'variable': self.var,
+            'file': self.filename,
+            'line': self.lineno,
+        }
+        data.delVarFlag(self.var, self.flag, **loginfo)
+
 class DataNode(AstNode):
     """
     Various data related updates. For the sake of sanity
@@ -270,6 +297,12 @@ def handleInclude(statements, filename, lineno, m, force):
 def handleExport(statements, filename, lineno, m):
     statements.append(ExportNode(filename, lineno, m.group(1)))
 
+def handleUnset(statements, filename, lineno, m):
+    statements.append(UnsetNode(filename, lineno, m.group(1)))
+
+def handleUnsetFlag(statements, filename, lineno, m):
+    statements.append(UnsetFlagNode(filename, lineno, m.group(1), m.group(2)))
+
 def handleData(statements, filename, lineno, groupd):
     statements.append(DataNode(filename, lineno, groupd))
 
diff --git a/bitbake/lib/bb/parse/parse_py/ConfHandler.py b/bitbake/lib/bb/parse/parse_py/ConfHandler.py
index b971292..875250d 100644
--- a/bitbake/lib/bb/parse/parse_py/ConfHandler.py
+++ b/bitbake/lib/bb/parse/parse_py/ConfHandler.py
@@ -57,6 +57,8 @@ __config_regexp__  = re.compile( r"""
 __include_regexp__ = re.compile( r"include\s+(.+)" )
 __require_regexp__ = re.compile( r"require\s+(.+)" )
 __export_regexp__ = re.compile( r"export\s+([a-zA-Z0-9\-_+.${}/]+)$" )
+__unset_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/]+)$" )
+__unset_flag_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/]+)\[([a-zA-Z0-9\-_+.${}/]+)\]$" )
 
 def init(data):
     topdir = data.getVar('TOPDIR', False)
@@ -185,6 +187,16 @@ def feeder(lineno, s, fn, statements):
         ast.handleExport(statements, fn, lineno, m)
         return
 
+    m = __unset_regexp__.match(s)
+    if m:
+        ast.handleUnset(statements, fn, lineno, m)
+        return
+
+    m = __unset_flag_regexp__.match(s)
+    if m:
+        ast.handleUnsetFlag(statements, fn, lineno, m)
+        return
+
     raise ParseError("unparsed line: '%s'" % s, fn, lineno);
 
 # Add us to the handlers list
diff --git a/bitbake/lib/bb/tests/parse.py b/bitbake/lib/bb/tests/parse.py
index c296db2..0b2706a 100644
--- a/bitbake/lib/bb/tests/parse.py
+++ b/bitbake/lib/bb/tests/parse.py
@@ -68,6 +68,23 @@ C = "3"
         with self.assertRaises(bb.parse.ParseError):
             d = bb.parse.handle(f.name, self.d)['']
 
+    unsettest = """
+A = "1"
+B = "2"
+B[flag] = "3"
+
+unset A
+unset B[flag]
+"""
+
+    def test_parse_unset(self):
+        f = self.parsehelper(self.unsettest)
+        d = bb.parse.handle(f.name, self.d)['']
+        self.assertEqual(d.getVar("A", True), None)
+        self.assertEqual(d.getVarFlag("A","flag", True), None)
+        self.assertEqual(d.getVar("B", True), "2")
+        
+
     overridetest = """
 RRECOMMENDS_${PN} = "a"
 RRECOMMENDS_${PN}_libc = "b"
-- 
git-series 0.8.9


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file
  2016-08-23  9:44 [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file Jérémy Rosen
  2016-08-23  9:44 ` [PATCH v2 1/1] add a syntax to clear variable Jérémy Rosen
@ 2016-09-06 10:44 ` Jérémy Rosen
  2016-09-06 13:20   ` Richard Purdie
  1 sibling, 1 reply; 5+ messages in thread
From: Jérémy Rosen @ 2016-09-06 10:44 UTC (permalink / raw)
  To: bitbake-devel

Any news ?


On 23/08/2016 11:44, Jérémy Rosen wrote:
> While working on a Yocto project I had a need to reactivate a task that was
> disabled (do_fetch[noexec]="1") Currently, bitbake does not check the value
> of the noexec flag but only if the flag is set. The only way to unset a flag
> is to use an inline python syntax like the one below
>
> python () {
>     d.delVarFlag("do_fetch","noexec")
> }
>
> Using inline python to do something as simple as clearing a flag sounded too
> complicated to me so I added a new keyword "unset" to bitbake with the
> following syntax :
>
> unset VAR
>
> will call d.delVar("VAR")
>
> unset VAR[flag]
>
> will call d.delVarFlag("VAR","flag")
>
> Documentation has been updated accordingly
>
> ---
> v2 : fix some wording in documentation
>       add unit test
>
> Jérémy Rosen (1):
>    add a syntax to clear variable
>
>   bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml | 17 ++++-
>   bitbake/lib/bb/parse/ast.py                                      | 33 +++++++-
>   bitbake/lib/bb/parse/parse_py/ConfHandler.py                     | 12 +++-
>   bitbake/lib/bb/tests/parse.py                                    | 17 ++++-
>   4 files changed, 79 insertions(+), 0 deletions(-)
>



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file
  2016-09-06 10:44 ` [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file Jérémy Rosen
@ 2016-09-06 13:20   ` Richard Purdie
  2016-09-06 15:25     ` Jérémy Rosen
  0 siblings, 1 reply; 5+ messages in thread
From: Richard Purdie @ 2016-09-06 13:20 UTC (permalink / raw)
  To: Jérémy Rosen, bitbake-devel

On Tue, 2016-09-06 at 12:44 +0200, Jérémy Rosen wrote:
> Any news ?

It merged three weeks ago?:

http://git.openembedded.org/bitbake/commit/?id=bedbd46ece8d1285b5cd2ea07dc64b4875b479aa

Cheers,

Richard


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file
  2016-09-06 13:20   ` Richard Purdie
@ 2016-09-06 15:25     ` Jérémy Rosen
  0 siblings, 0 replies; 5+ messages in thread
From: Jérémy Rosen @ 2016-09-06 15:25 UTC (permalink / raw)
  To: Richard Purdie, bitbake-devel


On 06/09/2016 15:20, Richard Purdie wrote:
> On Tue, 2016-09-06 at 12:44 +0200, Jérémy Rosen wrote:
>> Any news ?
> It merged three weeks ago?:
>
> http://git.openembedded.org/bitbake/commit/?id=bedbd46ece8d1285b5cd2ea07dc64b4875b479aa
>

daaaam

my bad, thx

> Cheers,
>
> Richard
>



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-09-06 15:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-23  9:44 [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file Jérémy Rosen
2016-08-23  9:44 ` [PATCH v2 1/1] add a syntax to clear variable Jérémy Rosen
2016-09-06 10:44 ` [PATCH v2 0/1][resend] Add a syntax to unset variable from bitbake configuration file Jérémy Rosen
2016-09-06 13:20   ` Richard Purdie
2016-09-06 15:25     ` Jérémy Rosen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.