patchtest_patterns.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # common pyparsing variables
  2. #
  3. # Copyright (C) 2016 Intel Corporation
  4. #
  5. # SPDX-License-Identifier: GPL-2.0-only
  6. import pyparsing
  7. import re
  8. # general
  9. colon = pyparsing.Literal(":")
  10. line_start = pyparsing.LineStart()
  11. line_end = pyparsing.LineEnd()
  12. lessthan = pyparsing.Literal("<")
  13. greaterthan = pyparsing.Literal(">")
  14. inappropriate = pyparsing.CaselessLiteral("Inappropriate")
  15. submitted = pyparsing.CaselessLiteral("Submitted")
  16. # word related
  17. nestexpr = pyparsing.nestedExpr(opener='[', closer=']')
  18. inappropriateinfo = pyparsing.Literal("Inappropriate") + nestexpr
  19. submittedinfo = pyparsing.Literal("Submitted") + nestexpr
  20. word = pyparsing.Word(pyparsing.alphas)
  21. worddot = pyparsing.Word(pyparsing.alphas+".")
  22. # metadata
  23. metadata_lic = 'LICENSE'
  24. invalid_license = 'PATCHTESTINVALID'
  25. metadata_chksum = 'LIC_FILES_CHKSUM'
  26. license_var = 'LICENSE'
  27. closed = 'CLOSED'
  28. lictag_re = pyparsing.AtLineStart("License-Update:")
  29. lic_chksum_added = pyparsing.AtLineStart("+" + metadata_chksum)
  30. lic_chksum_removed = pyparsing.AtLineStart("-" + metadata_chksum)
  31. add_mark = pyparsing.Regex('\\+ ')
  32. patch_max_line_length = 200
  33. metadata_src_uri = "SRC_URI"
  34. metadata_summary = "SUMMARY"
  35. cve_check_ignore_var = "CVE_CHECK_IGNORE"
  36. cve_status_var = "CVE_STATUS"
  37. endcommit_messages_regex = re.compile(
  38. r"\(From \w+-\w+ rev:|(?<!\S)Signed-off-by|(?<!\S)---\n"
  39. )
  40. patchmetadata_regex = re.compile(
  41. r"-{3} \S+|\+{3} \S+|@{2} -\d+,\d+ \+\d+,\d+ @{2} \S+"
  42. )
  43. # mbox
  44. auh_email = 'auh@yoctoproject.org'
  45. invalid_submitters = [pyparsing.Regex("^Upgrade Helper.+"),
  46. pyparsing.Regex(auh_email),
  47. pyparsing.Regex("uh@not\.set"),
  48. pyparsing.Regex("\S+@example\.com")]
  49. mbox_bugzilla = pyparsing.Regex('\[\s?YOCTO.*\]')
  50. mbox_bugzilla_validation = pyparsing.Regex('\[(\s?YOCTO\s?#\s?(\d+)\s?,?)+\]')
  51. mbox_revert_shortlog_regex = pyparsing.Regex('Revert\s+".*"')
  52. mbox_shortlog_maxlength = 90
  53. # patch
  54. cve = pyparsing.Regex("CVE\-\d{4}\-\d+")
  55. cve_payload_tag = pyparsing.Regex("\+CVE:(\s+CVE\-\d{4}\-\d+)+")
  56. upstream_status_regex = pyparsing.AtLineStart("+" + "Upstream-Status")
  57. # shortlog
  58. shortlog_target = pyparsing.OneOrMore(pyparsing.Word(pyparsing.printables.replace(':','')))
  59. shortlog_summary = pyparsing.OneOrMore(pyparsing.Word(pyparsing.printables))
  60. shortlog = line_start + shortlog_target + colon + shortlog_summary + line_end
  61. # signed-off-bys
  62. email_pattern = pyparsing.Regex(r"(?P<user>[A-Za-z0-9._%+-]+)@(?P<hostname>[A-Za-z0-9.-]+)\.(?P<domain>[A-Za-z]{2,})")
  63. signed_off_by_prefix = pyparsing.Literal("Signed-off-by:")
  64. signed_off_by_name = pyparsing.Regex('\S+.*(?= <)')
  65. signed_off_by_email = lessthan + email_pattern + greaterthan
  66. signed_off_by = pyparsing.AtLineStart(signed_off_by_prefix + signed_off_by_name + signed_off_by_email)
  67. patch_signed_off_by = pyparsing.AtLineStart("+" + signed_off_by_prefix + signed_off_by_name + signed_off_by_email)
  68. # upstream-status
  69. upstream_status_literal_valid_status = ["Pending", "Backport", "Denied", "Inappropriate", "Submitted"]
  70. upstream_status_nonliteral_valid_status = ["Pending", "Backport", "Denied", "Inappropriate [reason]", "Submitted [where]"]
  71. upstream_status_valid_status = pyparsing.Or(
  72. [pyparsing.Literal(status) for status in upstream_status_literal_valid_status]
  73. )
  74. upstream_status_prefix = pyparsing.Literal("Upstream-Status")
  75. upstream_status = line_start + upstream_status_prefix + colon + upstream_status_valid_status
  76. upstream_status_inappropriate_info = line_start + upstream_status_prefix + colon + inappropriateinfo
  77. upstream_status_submitted_info = line_start + upstream_status_prefix + colon + submittedinfo