[PATCH v4 2/3] binman: Support help messages for missing blobs

Simon Glass sjg at chromium.org
Wed Sep 9 01:56:13 CEST 2020


Hi Alper,

On Tue, 8 Sep 2020 at 10:37, Alper Nebi Yasak <alpernebiyasak at gmail.com> wrote:
>
> On 06/09/2020 19:39, Simon Glass wrote:
> > When an external blob is missing it can be quite confusing for the user.
> > Add a way to provide a help message that is shown.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > (no changes since v3)
> >
> > Changes in v3:
> > - Add a way to show help messages for missing blobs
> >
> >  tools/binman/README                        |  6 ++
> >  tools/binman/control.py                    | 69 +++++++++++++++++++++-
> >  tools/binman/entry.py                      |  9 +++
> >  tools/binman/ftest.py                      | 18 +++++-
> >  tools/binman/missing-blob-help             | 11 ++++
> >  tools/binman/test/168_fit_missing_blob.dts |  9 ++-
> >  6 files changed, 119 insertions(+), 3 deletions(-)
> >  create mode 100644 tools/binman/missing-blob-help
> >
> > diff --git a/tools/binman/README b/tools/binman/README
> > index 37ee3fc2d3b..f7bf285a915 100644
> > --- a/tools/binman/README
> > +++ b/tools/binman/README
> > @@ -343,6 +343,12 @@ compress:
> >       Sets the compression algortihm to use (for blobs only). See the entry
> >       documentation for details.
> >
> > +missing-msg:
> > +     Sets the tag of the message to show if this entry is missing. This is
> > +     used for external blobs. When they are missing it is helpful to show
> > +     information about what needs to be fixed. See missing-blob-help for the
> > +     message for each tag.
> > +
> >  The attributes supported for images and sections are described below. Several
> >  are similar to those for entries.
> >
> > diff --git a/tools/binman/control.py b/tools/binman/control.py
> > index 15bfac582a7..ee5771e7292 100644
> > --- a/tools/binman/control.py
> > +++ b/tools/binman/control.py
> > @@ -9,6 +9,7 @@ from collections import OrderedDict
> >  import glob
> >  import os
> >  import pkg_resources
> > +import re
> >
> >  import sys
> >  from patman import tools
> > @@ -22,6 +23,11 @@ from patman import tout
> >  # Make this global so that it can be referenced from tests
> >  images = OrderedDict()
> >
> > +# Help text for each type of missing blob, dict:
> > +#    key: Value of the entry's 'missing-msg' or entry name
> > +#    value: Text for the help
> > +missing_blob_help = {}
> > +
> >  def _ReadImageDesc(binman_node):
> >      """Read the image descriptions from the /binman node
> >
> > @@ -54,6 +60,66 @@ def _FindBinmanNode(dtb):
> >              return node
> >      return None
> >
> > +def _ReadMissingBlobHelp():
> > +    """Read the missing-blob-help file
> > +
> > +    This file containins help messages explaining what to do when external blobs
> > +    are missing.
> > +
> > +    Returns:
> > +        Dict:
> > +            key: Message tag (str)
> > +            value: Message text (str)
> > +    """
> > +
> > +    def _FinishTag(tag, msg, result):
> > +        if tag:
> > +            result[tag] = msg.rstrip()
> > +            tag = None
> > +            msg = ''
> > +        return tag, msg
> > +
> > +    my_data = pkg_resources.resource_string(__name__, 'missing-blob-help')
> > +    re_tag = re.compile('^([-a-z0-9]+):$')
> > +    result = {}
> > +    tag = None
> > +    msg = ''
> > +    for line in my_data.decode('utf-8').splitlines():
> > +        if not line.startswith('#'):
> > +            m_tag = re_tag.match(line)
> > +            if m_tag:
> > +                _, msg = _FinishTag(tag, msg, result)
> > +                tag = m_tag.group(1)
> > +            elif tag:
> > +                msg += line + '\n'
> > +    _FinishTag(tag, msg, result)
> > +    return result
>
> This looks a bit complex, I think something like this would be clearer:
>
>     result = {}
>     tag = None
>     for line in my_data.decode('utf-8').splitlines():
>         m_tag = re_tag.match(line)
>         if line.startswith('#'):
>             continue
>         elif m_tag:
>             tag = m_tag.group(1)
>             result[tag] = []
>         elif tag:
>             result[tag].append(line)
>     for tag, lines in result.items():
>         result[tag] = "".join(lines).rstrip()
>     return result
>

Yes that is easier, thank you. I'll use this in v4 and perhaps you can
reply with your sign-off.

Regards,
Simon


More information about the U-Boot mailing list