mirror of
https://xff.cz/git/u-boot/
synced 2025-09-21 02:22:18 +02:00
binman: Support help messages for missing blobs
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@chromium.org> Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
This commit is contained in:
@@ -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
|
||||
|
||||
def _ShowBlobHelp(path, text):
|
||||
tout.Warning('\n%s:' % path)
|
||||
for line in text.splitlines():
|
||||
tout.Warning(' %s' % line)
|
||||
|
||||
def _ShowHelpForMissingBlobs(missing_list):
|
||||
"""Show help for each missing blob to help the user take action
|
||||
|
||||
Args:
|
||||
missing_list: List of Entry objects to show help for
|
||||
"""
|
||||
global missing_blob_help
|
||||
|
||||
if not missing_blob_help:
|
||||
missing_blob_help = _ReadMissingBlobHelp()
|
||||
|
||||
for entry in missing_list:
|
||||
tags = entry.GetHelpTags()
|
||||
|
||||
# Show the first match help message
|
||||
for tag in tags:
|
||||
if tag in missing_blob_help:
|
||||
_ShowBlobHelp(entry._node.path, missing_blob_help[tag])
|
||||
break
|
||||
|
||||
def GetEntryModules(include_testing=True):
|
||||
"""Get a set of entry class implementations
|
||||
|
||||
@@ -478,6 +544,7 @@ def ProcessImage(image, update_fdt, write_map, get_contents=True,
|
||||
if missing_list:
|
||||
tout.Warning("Image '%s' is missing external blobs and is non-functional: %s" %
|
||||
(image.name, ' '.join([e.name for e in missing_list])))
|
||||
_ShowHelpForMissingBlobs(missing_list)
|
||||
return bool(missing_list)
|
||||
|
||||
|
||||
@@ -563,7 +630,7 @@ def Binman(args):
|
||||
tools.WriteFile(dtb_item._fname, dtb_item.GetContents())
|
||||
|
||||
if missing:
|
||||
tout.Warning("Some images are invalid")
|
||||
tout.Warning("\nSome images are invalid")
|
||||
finally:
|
||||
tools.FinaliseOutputDir()
|
||||
finally:
|
||||
|
Reference in New Issue
Block a user