[Buildroot] [PATCH 5/9] check-package: check *.patch files

Ricardo Martincoski ricardo.martincoski at gmail.com
Sat Dec 31 03:21:06 UTC 2016


Warn when the name of the patch file does not start with number (apply
order), see [1].
Warn when the patch was generated using git format-patch without -N, see
[2].
Warn when the patch file has no SoB, see [3].

[1] http://nightly.buildroot.org/#_providing_patches
[2] http://patchwork.ozlabs.org/patch/704753/
[3] http://nightly.buildroot.org/#_format_and_licensing_of_the_package_patches

Signed-off-by: Ricardo Martincoski <ricardo.martincoski at gmail.com>
---

Notes:
    $ time support/scripts/check-package $(find package -type f) >/dev/null 2>/dev/null
    
    real	0m1.153s
    user	0m1.096s
    sys	0m0.056s
    
    CHECK_APPLY_ORDER:
     support/scripts/check-package --include-only check_apply_order \
     $(find package -name '*.patch') 2>/dev/null | wc -l
      4
     (cd support/scripts/check-package-example && \
     ../check-package --include-only check_apply_order -vv package/*/*)
      package/package1/wrong-name.patch:0: use name <number>-<description>.patch (http://nightly.buildroot.org/#_providing_patches)
      159 lines processed
      1 warnings generated
    
    CHECK_NUMBERED_SUBJECT:
     support/scripts/check-package --include-only check_numbered_subject \
     $(find package -name '*.patch') 2>/dev/null | wc -l
      149
     (cd support/scripts/check-package-example && \
     ../check-package --include-only check_numbered_subject -vv package/*/*)
      package/package1/0001-do-something.patch:4: generate your patches with 'git format-patch -N'
      Subject: [PATCH 25/39] do something
      159 lines processed
      1 warnings generated
    
    CHECK_SOB:
     support/scripts/check-package --include-only check_sob \
     $(find package -name '*.patch') 2>/dev/null | wc -l
      143
     (cd support/scripts/check-package-example && \
     ../check-package --include-only check_sob -vv package/*/*)
      package/package1/0001-do-something.patch:0: missing Signed-off-by in the header (http://nightly.buildroot.org/#_format_and_licensing_of_the_package_patches)
      package/package1/wrong-name.patch:0: missing Signed-off-by in the header (http://nightly.buildroot.org/#_format_and_licensing_of_the_package_patches)
      159 lines processed
      2 warnings generated

 support/scripts/checkpackagelib_patch.py | 43 ++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/support/scripts/checkpackagelib_patch.py b/support/scripts/checkpackagelib_patch.py
index 0fb3685a7..f10dc31c4 100644
--- a/support/scripts/checkpackagelib_patch.py
+++ b/support/scripts/checkpackagelib_patch.py
@@ -3,5 +3,48 @@
 # functions don't need to check for things already checked by running
 # "make package-dirclean package-patch".
 
+import re
+
 # Notice: ignore 'imported but unused' from pyflakes for check functions.
 from checkpackagelib import check_newline_at_eof
+
+
+APPLY_ORDER = re.compile("/\d{1,4}-[^/]*$")
+
+
+def check_apply_order(
+        fname, args, lineno=0, text=None, start=False, end=False):
+    if start and not APPLY_ORDER.search(fname):
+        return ["{}:0: use name <number>-<description>.patch "
+                "({}#_providing_patches)".format(fname, args.manual_url)]
+
+
+NUMBERED_PATCH = re.compile("Subject:\s*\[PATCH\s*\d+/\d+\]")
+
+
+def check_numbered_subject(
+        fname, args, lineno=0, text=None, start=False, end=False):
+    if start or end:
+        return
+    if NUMBERED_PATCH.search(text):
+        return ["{}:{}: generate your patches with 'git format-patch -N'"
+                .format(fname, lineno),
+                text]
+
+
+SOB_ENTRY = re.compile("^Signed-off-by: .*$")
+
+
+def check_sob(
+        fname, args, lineno=0, text=None, start=False, end=False):
+    if start:
+        check_sob.found = False
+        return
+    if check_sob.found:
+        return
+    if end:
+        return ["{}:0: missing Signed-off-by in the header "
+                "({}#_format_and_licensing_of_the_package_patches)"
+                .format(fname, args.manual_url)]
+    if SOB_ENTRY.search(text):
+        check_sob.found = True
-- 
2.11.0




More information about the buildroot mailing list