[gnome-continuous-yocto/gnomeostree-3.28-rocko: 4025/8267] insane.bbclass: print license text as part of QA message



commit 1f6e6455feb83630af3ccd283ede78a283834bbd
Author: Patrick Ohly <patrick ohly intel com>
Date:   Wed Jan 11 12:10:33 2017 +0100

    insane.bbclass: print license text as part of QA message
    
    It it is hard to select exactly the right lines from a file, in
    particular because the documentation did not specify the exact
    semantic (YOCTO #10898).
    
    When the QA license check fails, it now includes the license text for
    which the md5sum was calculated. When adding a new entry to
    LIC_FILES_CHKSUM, developers can then verify that they picked the
    desired lines. When the checksum of an older entry changes, the developer
    does not have to manually look up the changed text.
    
    Here's an example which probably has an endline which is too large
    (message triggered by changing the md5sum in the recipe):
    
    ERROR: cmake-native-3.7.1-r0 do_populate_lic: QA Issue: cmake-native: The LIC_FILES_CHKSUM does not match 
for file://Source/cmake.h;beginline=1;endline=3;md5=deadbeef
    cmake-native: The new md5 checksum is 4494dee184212fc89c469c3acd555a14
    cmake-native: Here is the selected license text:
    vvvvvvvvvvvvvvvvvvvvvvvvvvvv beginline=1 vvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
       file Copyright.txt or https://cmake.org/licensing for details.  */
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ endline=3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    cmake-native: Check if the license information has changed in .../cmake.h (lines 1 through to 3) to 
verify that the LICENSE value "BSD" remains valid [license-checksum]
    
    The beginline/endline values are only repeated in the borders if set.
    
    License snippets larger larger than 20 lines (configurable with
    QA_MAX_LICENSE_LINES) are truncated in the middle.
    
    (From OE-Core rev: b5b869348adc8e932eb58ecdfdff93d1d63e775c)
    
    Signed-off-by: Patrick Ohly <patrick ohly intel com>
    Signed-off-by: Ross Burton <ross burton intel com>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 meta/classes/insane.bbclass |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)
---
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 632821c..7332e45 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -740,17 +740,21 @@ python populate_lic_qa_checksum() {
 
         if (not beginline) and (not endline):
             md5chksum = bb.utils.md5_file(srclicfile)
+            with open(srclicfile, 'rb') as f:
+                license = f.read()
         else:
             fi = open(srclicfile, 'rb')
             fo = tempfile.NamedTemporaryFile(mode='wb', prefix='poky.', suffix='.tmp', delete=False)
             tmplicfile = fo.name;
             lineno = 0
             linesout = 0
+            license = []
             for line in fi:
                 lineno += 1
                 if (lineno >= beginline):
                     if ((lineno <= endline) or not endline):
                         fo.write(line)
+                        license.append(line)
                         linesout += 1
                     else:
                         break
@@ -758,6 +762,7 @@ python populate_lic_qa_checksum() {
             fo.close()
             fi.close()
             md5chksum = bb.utils.md5_file(tmplicfile)
+            license = b''.join(license)
             os.unlink(tmplicfile)
 
         if recipemd5 == md5chksum:
@@ -766,6 +771,30 @@ python populate_lic_qa_checksum() {
             if recipemd5:
                 msg = pn + ": The LIC_FILES_CHKSUM does not match for " + url
                 msg = msg + "\n" + pn + ": The new md5 checksum is " + md5chksum
+                try:
+                    license_lines = license.decode('utf-8').split('\n')
+                except:
+                    # License text might not be valid UTF-8, in which
+                    # case we don't know how to include it in our output
+                    # and have to skip it.
+                    pass
+                else:
+                    max_lines = int(d.getVar('QA_MAX_LICENSE_LINES') or 20)
+                    if not license_lines or license_lines[-1] != '':
+                        # Ensure that our license text ends with a line break
+                        # (will be added with join() below).
+                        license_lines.append('')
+                    remove = len(license_lines) - max_lines
+                    if remove > 0:
+                        start = max_lines // 2
+                        end = start + remove - 1
+                        del license_lines[start:end]
+                        license_lines.insert(start, '...')
+                    msg = msg + "\n" + pn + ": Here is the selected license text:" + \
+                          "\n" + \
+                          "{:v^70}".format(" beginline=%d " % beginline if beginline else "") + \
+                          "\n" + "\n".join(license_lines) + \
+                          "{:^^70}".format(" endline=%d " % endline if endline else "")
                 if beginline:
                     if endline:
                         srcfiledesc = "%s (lines %d through to %d)" % (srclicfile, beginline, endline)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]