poky/scripts/buildhistory-diff
Richard Purdie ffae400179 meta/lib+scripts: Convert to SPDX license headers
This adds SPDX license headers in place of the wide assortment of things
currently in our script headers. We default to GPL-2.0-only except for the
oeqa code where it was clearly submitted and marked as MIT on the most part
or some scripts which had the "or later" GPL versioning.

The patch also drops other obsolete bits of file headers where they were
encoountered such as editor modelines, obsolete maintainer information or
the phrase "All rights reserved" which is now obsolete and not required in
copyright headers (in this case its actually confusing for licensing as all
rights were not reserved).

More work is needed for OE-Core but this takes care of the bulk of the scripts
and meta/lib directories.

The top level LICENSE files are tweaked to match the new structure and the
SPDX naming.

(From OE-Core rev: f8c9c511b5f1b7dbd45b77f345cb6c048ae6763e)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-05-09 16:31:55 +01:00

5.5 KiB
Executable File

#!/usr/bin/env python3

Report significant differences in the buildhistory repository since a specific revision

Copyright (C) 2013 Intel Corporation

Author: Paul Eggleton paul.eggleton@linux.intel.com

SPDX-License-Identifier: GPL-2.0-only

import sys import os import argparse from distutils.version import LooseVersion

Ensure PythonGit is installed (buildhistory_analysis needs it)

try: import git except ImportError: print("Please install GitPython (python3-git) 0.3.4 or later in order to use this script") sys.exit(1)

def get_args_parser(): description = "Reports significant differences in the buildhistory repository."

parser = argparse.ArgumentParser(description=description,
                                 usage="""
%(prog)s [options] [from-revision [to-revision]]
(if not specified, from-revision defaults to build-minus-1, and to-revision defaults to HEAD)""")

parser.add_argument('-p', '--buildhistory-dir',
                    action='store',
                    dest='buildhistory_dir',
                    default='buildhistory/',
                    help="Specify path to buildhistory directory (defaults to buildhistory/ under cwd)")
parser.add_argument('-v', '--report-version',
                    action='store_true',
                    dest='report_ver',
                    default=False,
                    help="Report changes in PKGE/PKGV/PKGR even when the values are still the default (PE/PV/PR)")
parser.add_argument('-a', '--report-all',
                    action='store_true',
                    dest='report_all',
                    default=False,
                    help="Report all changes, not just the default significant ones")
parser.add_argument('-s', '---signatures',
                    action='store_true',
                    dest='sigs',
                    default=False,
                    help="Report list of signatures differing instead of output")
parser.add_argument('-S', '--signatures-with-diff',
                    action='store_true',
                    dest='sigsdiff',
                    default=False,
                    help="Report on actual signature differences instead of output (requires signature data to have been generated, either by running the actual tasks or using bitbake -S)")
parser.add_argument('-e', '--exclude-path',
                    action='append',
                    help="Exclude path from the output")
parser.add_argument('-c', '--colour',
                    choices=('yes', 'no', 'auto'),
                    default="auto",
                    help="Whether to colourise (defaults to auto)")
parser.add_argument('revisions',
                    default = ['build-minus-1', 'HEAD'],
                    nargs='*',
                    help=argparse.SUPPRESS)
return parser

def main():

parser = get_args_parser()
args = parser.parse_args()

if LooseVersion(git.__version__) < '0.3.1':
    sys.stderr.write("Version of GitPython is too old, please install GitPython (python-git) 0.3.1 or later in order to use this script\n")
    sys.exit(1)

if len(args.revisions) > 2:
    sys.stderr.write('Invalid argument(s) specified: %s\n\n' % ' '.join(args.revisions[2:]))
    parser.print_help()

    sys.exit(1)
if not os.path.exists(args.buildhistory_dir):
    if args.buildhistory_dir == 'buildhistory/':
        cwd = os.getcwd()
        if os.path.basename(cwd) == 'buildhistory':
            args.buildhistory_dir = cwd

if not os.path.exists(args.buildhistory_dir):
    sys.stderr.write('Buildhistory directory "%s" does not exist\n\n' % args.buildhistory_dir)
    parser.print_help()
    sys.exit(1)

scripts_path = os.path.abspath(os.path.dirname(os.path.abspath(sys.argv[0])))
lib_path = scripts_path + '/lib'
sys.path = sys.path + [lib_path]

import scriptpath

# Set path to OE lib dir so we can import the buildhistory_analysis module
scriptpath.add_oe_lib_path()
# Set path to bitbake lib dir so the buildhistory_analysis module can load bb.utils
bitbakepath = scriptpath.add_bitbake_lib_path()

if not bitbakepath:
    sys.stderr.write("Unable to find bitbake by searching parent directory of this script or PATH\n")
    sys.exit(1)

if len(args.revisions) == 1:
    if '..'  in args.revisions[0]:
        fromrev, torev = args.revisions[0].split('..')
    else:
        fromrev, torev = args.revisions[0], 'HEAD'
elif len(args.revisions) == 2:
    fromrev, torev = args.revisions

from oe.buildhistory_analysis import init_colours, process_changes
import gitdb

init_colours({"yes": True, "no": False, "auto": sys.stdout.isatty()}[args.colour])

try:
    changes = process_changes(args.buildhistory_dir, fromrev, torev,
                              args.report_all, args.report_ver, args.sigs,
                              args.sigsdiff, args.exclude_path)
except gitdb.exc.BadObject as e:
    if not args.revisions:
        sys.stderr.write("Unable to find previous build revision in buildhistory repository\n\n")
        parser.print_help()
    else:
        sys.stderr.write('Specified git revision "%s" is not valid\n' % e.args[0])
    sys.exit(1)

for chg in changes:
    out = str(chg)
    if out:
        print(out)

sys.exit(0)

if name == "main": main()