[bitbake-devel] [PATCH 1/2] bitbake: BBHandler: Fix addtask and deltask

Richard Purdie richard.purdie at linuxfoundation.org
Thu Apr 25 10:48:58 UTC 2019


On Thu, 2019-04-25 at 18:00 +0800, Robert Yang wrote:
> The following commands are not supported, but they were ignored
> silently, that
> may suprise users:
> 
> * addtask task1 task2
>   task2 is ignored
> 
> * addtask task1 before task2 before task3
>   Should be: addtask task1 before task2 task3
> 
> * addtask task1 after task2 after task3
>   Should be: addtask task1 after task2 task3
> 
> * deltask task1 task2
>   task2 is ignore
> 
> This patch can check and warn for them.
> 
> [YOCTO #13282]
> 
> Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
> ---
>  bitbake/lib/bb/parse/parse_py/BBHandler.py | 25
> ++++++++++++++++++++++++-
>  1 file changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py
> b/bitbake/lib/bb/parse/parse_py/BBHandler.py
> index 9dba5f2..4d90ff0 100644
> --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py
> +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py
> @@ -42,7 +42,7 @@ __func_start_regexp__    =
> re.compile(r"(((?P<py>python)|(?P<fr>fakeroot))\s*)*(
>  __inherit_regexp__       = re.compile(r"inherit\s+(.+)" )
>  __export_func_regexp__   = re.compile(r"EXPORT_FUNCTIONS\s+(.+)" )
>  __addtask_regexp__       =
> re.compile(r"addtask\s+(?P<func>\w+)\s*((before\s*(?P<before>((.*(?=a
> fter))|(.*))))|(after\s*(?P<after>((.*(?=before))|(.*)))))*")
> -__deltask_regexp__       = re.compile(r"deltask\s+(?P<func>\w+)")
> +__deltask_regexp__       =
> re.compile(r"deltask\s+(?P<func>\w+)(?P<ignores>.*)")
>  __addhandler_regexp__    = re.compile(r"addhandler\s+(.+)" )
>  __def_regexp__           = re.compile(r"def\s+(\w+).*:" )
>  __python_func_regexp__   = re.compile(r"(\s+.*)|(^$)|(^#)" )
> @@ -236,11 +236,34 @@ def feeder(lineno, s, fn, root, statements,
> eof=False):
>  
>      m = __addtask_regexp__.match(s)
>      if m:
> +        if len(m.group().split()) == 2:
> +            # Check and warn for "addtask task1 task2"
> +            m2 = re.match(r"addtask\s+(?P<func>\w+)(?P<ignores>.*)",
> s)
> +            if m2 and m2.group('ignores'):
> +                logger.warning('addtask ignored: "%s"' %
> m2.group('ignores'))
> +
> +        # Check and warn for "addtask task1 before task2 before
> task3", the
> +        # similar to "after"
> +        dup_after = 0
> +        dup_before = 0
> +        for tmp in s.split():
> +            if 'before' == tmp:
> +                dup_before += 1
> +            if 'after' == tmp:
> +                dup_after += 1
> +        if dup_after > 1:

taskexpression = s.split()
if taskexpression.count("after") > 1:
   
logger.warning("X")
if taskexpression.count("before") > 1:
   
logger.warning("Y")

> +            logger.warning('addtask found more than 1 keyword
> "after": "%s"' % s)

How about:

addtask contained multiple 'after' keywords, only one is supported

> +        if dup_before > 1:
> +            logger.warning('addtask found more than 1 keyword
> "before": "%s"' % s)

and:

addtask contained multiple 'before' keywords, only one is supported

>          ast.handleAddTask(statements, fn, lineno, m)
>          return
>  
>      m = __deltask_regexp__.match(s)
>      if m:
> +        # Check and warn "for deltask task1 task2"
> +        if m.group('ignores'):
> +            logger.warning('deltask ignored: "%s"' %
> m.group('ignores'))

deltask listing multiple tasks is not supported

I did wonder if we should support multiple tasks for deltask?

Also, we might want to consider adding something to lib/bb/tests/ for
this?

Cheers,

Richard



More information about the bitbake-devel mailing list