poky/scripts/buildhistory-collect-srcrevs
Peter Kjellerstedt 881bafcbb9 buildhistory-collect-srcrevs: Adapt to the new variable override syntax
(From OE-Core rev: bcce0e7cef5768d5cfe58c356f6196af8ce03537)

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-08-26 22:09:44 +01:00

4.0 KiB
Executable File

#!/usr/bin/env python3

Collects the recorded SRCREV values from buildhistory and reports on them

Copyright 2013 Intel Corporation

Authored-by: Paul Eggleton paul.eggleton@intel.com

SPDX-License-Identifier: GPL-2.0-only

import collections import os import sys import optparse import logging

def logger_create(): logger = logging.getLogger("buildhistory") loggerhandler = logging.StreamHandler() loggerhandler.setFormatter(logging.Formatter("%(levelname)s: %(message)s")) logger.addHandler(loggerhandler) logger.setLevel(logging.INFO) return logger

logger = logger_create()

def main(): parser = optparse.OptionParser( description = "Collects the recorded SRCREV values from buildhistory and reports on them.", usage = """ %prog [options]""")

parser.add_option("-a", "--report-all",
        help = "Report all SRCREV values, not just ones where AUTOREV has been used",
        action="store_true", dest="reportall")
parser.add_option("-f", "--forcevariable",
        help = "Use forcevariable override for all output lines",
        action="store_true", dest="forcevariable")
parser.add_option("-p", "--buildhistory-dir",
        help = "Specify path to buildhistory directory (defaults to buildhistory/ under cwd)",
        action="store", dest="buildhistory_dir", default='buildhistory/')

options, args = parser.parse_args(sys.argv)

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

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

if options.forcevariable:
    forcevariable = ':forcevariable'
else:
    forcevariable = ''

all_srcrevs = collections.defaultdict(list)
for root, dirs, files in os.walk(options.buildhistory_dir):
    dirs.sort()
    if '.git' in dirs:
        dirs.remove('.git')
    for fn in files:
        if fn == 'latest_srcrev':
            curdir = os.path.basename(os.path.dirname(root))
            fullpath = os.path.join(root, fn)
            pn = os.path.basename(root)
            srcrev = None
            orig_srcrev = None
            orig_srcrevs = {}
            srcrevs = {}
            with open(fullpath) as f:
                for line in f:
                    if '=' in line:
                        splitval = line.split('=')
                        value = splitval[1].strip('" \t\n\r')
                    if line.startswith('# SRCREV = '):
                        orig_srcrev = value
                    elif line.startswith('# SRCREV_'):
                        splitval = line.split('=')
                        name = splitval[0].split('_')[1].strip()
                        orig_srcrevs[name] = value
                    elif line.startswith('SRCREV ='):
                        srcrev = value
                    elif line.startswith('SRCREV_'):
                        name = splitval[0].split('_')[1].strip()
                        srcrevs[name] = value
            if srcrev and (options.reportall or srcrev != orig_srcrev):
                all_srcrevs[curdir].append((pn, None, srcrev))
            for name, value in srcrevs.items():
                orig = orig_srcrevs.get(name, orig_srcrev)
                if options.reportall or value != orig:
                    all_srcrevs[curdir].append((pn, name, value))

for curdir, srcrevs in sorted(all_srcrevs.items()):
    if srcrevs:
        print('# %s' % curdir)
        for pn, name, srcrev in srcrevs:
            if name:
                print('SRCREV_%s:pn-%s%s = "%s"' % (name, pn, forcevariable, srcrev))
            else:
                print('SRCREV:pn-%s%s = "%s"' % (pn, forcevariable, srcrev))

if name == "main": main()