diff options
Diffstat (limited to 'meta/lib/oe/qa.py')
-rw-r--r-- | meta/lib/oe/qa.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/meta/lib/oe/qa.py b/meta/lib/oe/qa.py index e8a854a302..f8ae3c743f 100644 --- a/meta/lib/oe/qa.py +++ b/meta/lib/oe/qa.py | |||
@@ -1,4 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Copyright OpenEmbedded Contributors | ||
3 | # | ||
2 | # SPDX-License-Identifier: GPL-2.0-only | 4 | # SPDX-License-Identifier: GPL-2.0-only |
3 | # | 5 | # |
4 | 6 | ||
@@ -48,6 +50,9 @@ class ELFFile: | |||
48 | return self | 50 | return self |
49 | 51 | ||
50 | def __exit__(self, exc_type, exc_value, traceback): | 52 | def __exit__(self, exc_type, exc_value, traceback): |
53 | self.close() | ||
54 | |||
55 | def close(self): | ||
51 | if self.data: | 56 | if self.data: |
52 | self.data.close() | 57 | self.data.close() |
53 | 58 | ||
@@ -128,6 +133,9 @@ class ELFFile: | |||
128 | """ | 133 | """ |
129 | return self.getShort(ELFFile.E_MACHINE) | 134 | return self.getShort(ELFFile.E_MACHINE) |
130 | 135 | ||
136 | def set_objdump(self, cmd, output): | ||
137 | self.objdump_output[cmd] = output | ||
138 | |||
131 | def run_objdump(self, cmd, d): | 139 | def run_objdump(self, cmd, d): |
132 | import bb.process | 140 | import bb.process |
133 | import sys | 141 | import sys |
@@ -171,6 +179,57 @@ def elf_machine_to_string(machine): | |||
171 | except: | 179 | except: |
172 | return "Unknown (%s)" % repr(machine) | 180 | return "Unknown (%s)" % repr(machine) |
173 | 181 | ||
182 | def write_error(type, error, d): | ||
183 | logfile = d.getVar('QA_LOGFILE') | ||
184 | if logfile: | ||
185 | p = d.getVar('P') | ||
186 | with open(logfile, "a+") as f: | ||
187 | f.write("%s: %s [%s]\n" % (p, error, type)) | ||
188 | |||
189 | def handle_error(error_class, error_msg, d): | ||
190 | if error_class in (d.getVar("ERROR_QA") or "").split(): | ||
191 | write_error(error_class, error_msg, d) | ||
192 | bb.error("QA Issue: %s [%s]" % (error_msg, error_class)) | ||
193 | d.setVar("QA_ERRORS_FOUND", "True") | ||
194 | return False | ||
195 | elif error_class in (d.getVar("WARN_QA") or "").split(): | ||
196 | write_error(error_class, error_msg, d) | ||
197 | bb.warn("QA Issue: %s [%s]" % (error_msg, error_class)) | ||
198 | else: | ||
199 | bb.note("QA Issue: %s [%s]" % (error_msg, error_class)) | ||
200 | return True | ||
201 | |||
202 | def add_message(messages, section, new_msg): | ||
203 | if section not in messages: | ||
204 | messages[section] = new_msg | ||
205 | else: | ||
206 | messages[section] = messages[section] + "\n" + new_msg | ||
207 | |||
208 | def exit_with_message_if_errors(message, d): | ||
209 | qa_fatal_errors = bb.utils.to_boolean(d.getVar("QA_ERRORS_FOUND"), False) | ||
210 | if qa_fatal_errors: | ||
211 | bb.fatal(message) | ||
212 | |||
213 | def exit_if_errors(d): | ||
214 | exit_with_message_if_errors("Fatal QA errors were found, failing task.", d) | ||
215 | |||
216 | def check_upstream_status(fullpath): | ||
217 | import re | ||
218 | kinda_status_re = re.compile(r"^.*upstream.*status.*$", re.IGNORECASE | re.MULTILINE) | ||
219 | strict_status_re = re.compile(r"^Upstream-Status: (Pending|Submitted|Denied|Inappropriate|Backport|Inactive-Upstream)( .+)?$", re.MULTILINE) | ||
220 | guidelines = "https://docs.yoctoproject.org/contributor-guide/recipe-style-guide.html#patch-upstream-status" | ||
221 | |||
222 | with open(fullpath, encoding='utf-8', errors='ignore') as f: | ||
223 | file_content = f.read() | ||
224 | match_kinda = kinda_status_re.search(file_content) | ||
225 | match_strict = strict_status_re.search(file_content) | ||
226 | |||
227 | if not match_strict: | ||
228 | if match_kinda: | ||
229 | return "Malformed Upstream-Status in patch\n%s\nPlease correct according to %s :\n%s" % (fullpath, guidelines, match_kinda.group(0)) | ||
230 | else: | ||
231 | return "Missing Upstream-Status in patch\n%s\nPlease add according to %s ." % (fullpath, guidelines) | ||
232 | |||
174 | if __name__ == "__main__": | 233 | if __name__ == "__main__": |
175 | import sys | 234 | import sys |
176 | 235 | ||