diff options
author | Mike Crowe <mac@mcrowe.com> | 2021-10-15 15:39:53 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-10-17 11:56:32 +0100 |
commit | 51b1611e204b32b3e65176ef86d4562e2f330835 (patch) | |
tree | 7845a123d2eddbc2c9d5f9f72e1c2be9c2dea730 /meta/lib/oe | |
parent | 25675706b6339b6a11e69dbad1c885a4b79fc57c (diff) | |
download | poky-51b1611e204b32b3e65176ef86d4562e2f330835.tar.gz |
lib/oe/qa,insane: Move extra error handling functions to library
Extract package_qa_write_error, package_qa_handle_error and
package_qa_add_message functions from insane.bbclass to lib/oe/qa.py and
drop the package_qa_ prefixes.
Update various bbclasses to use the new functions. No import is required
since base.bbclass puts oe.qa in OE_IMPORTS.
Stop requiring callers to manually track whether a fatal error has been
encountered via a "sane" flag. Instead replace the QA_SANE variable with
QA_ERRORS_FOUND and call oe.qa.exit_if_errors or
oe.qa.exit_with_message_if_errors at the end of each task.
Inspired by discussion resulting from
https://lists.openembedded.org/g/openembedded-core/message/156793 and
https://lists.openembedded.org/g/openembedded-core/message/156900
(From OE-Core rev: f0ad152ef4cc15c042bc9eeefb6af096d054b220)
Signed-off-by: Mike Crowe <mac@mcrowe.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oe')
-rw-r--r-- | meta/lib/oe/qa.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/meta/lib/oe/qa.py b/meta/lib/oe/qa.py index e8a854a302..efab7e8564 100644 --- a/meta/lib/oe/qa.py +++ b/meta/lib/oe/qa.py | |||
@@ -171,6 +171,40 @@ def elf_machine_to_string(machine): | |||
171 | except: | 171 | except: |
172 | return "Unknown (%s)" % repr(machine) | 172 | return "Unknown (%s)" % repr(machine) |
173 | 173 | ||
174 | def write_error(type, error, d): | ||
175 | logfile = d.getVar('QA_LOGFILE') | ||
176 | if logfile: | ||
177 | p = d.getVar('P') | ||
178 | with open(logfile, "a+") as f: | ||
179 | f.write("%s: %s [%s]\n" % (p, error, type)) | ||
180 | |||
181 | def handle_error(error_class, error_msg, d): | ||
182 | if error_class in (d.getVar("ERROR_QA") or "").split(): | ||
183 | write_error(error_class, error_msg, d) | ||
184 | bb.error("QA Issue: %s [%s]" % (error_msg, error_class)) | ||
185 | d.setVar("QA_ERRORS_FOUND", "True") | ||
186 | return False | ||
187 | elif error_class in (d.getVar("WARN_QA") or "").split(): | ||
188 | write_error(error_class, error_msg, d) | ||
189 | bb.warn("QA Issue: %s [%s]" % (error_msg, error_class)) | ||
190 | else: | ||
191 | bb.note("QA Issue: %s [%s]" % (error_msg, error_class)) | ||
192 | return True | ||
193 | |||
194 | def add_message(messages, section, new_msg): | ||
195 | if section not in messages: | ||
196 | messages[section] = new_msg | ||
197 | else: | ||
198 | messages[section] = messages[section] + "\n" + new_msg | ||
199 | |||
200 | def exit_with_message_if_errors(message, d): | ||
201 | qa_fatal_errors = bb.utils.to_boolean(d.getVar("QA_ERRORS_FOUND"), False) | ||
202 | if qa_fatal_errors: | ||
203 | bb.fatal(message) | ||
204 | |||
205 | def exit_if_errors(d): | ||
206 | exit_with_message_if_errors("Fatal QA errors were found, failing task.", d) | ||
207 | |||
174 | if __name__ == "__main__": | 208 | if __name__ == "__main__": |
175 | import sys | 209 | import sys |
176 | 210 | ||