buildhistory: add script to check for significant changes

Adds a buildhistory-diff script which can be used to analyse changes in
the buildhistory git repository (as produced by buildhistory.bbclass),
and report significant ones that may need manual checking to ensure they
aren't regressions (e.g. package size changed by more than a certain
percentage, files added/removed/changed in the image, etc.)

The implementation is actually split into a small script and a Python
module, in order to make the logic re-usable in a future web-based
interface.

Implements the first part of [YOCTO #1566].

(From OE-Core rev: 5e5cbb9bd8cdce402b979680288ac8c51799a24d)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton
2012-01-05 14:46:25 +00:00
committed by Richard Purdie
parent f22c292261
commit fcc5f6883c
2 changed files with 283 additions and 0 deletions

43
scripts/buildhistory-diff Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/env python
# Report significant differences in the buildhistory repository since a specific revision
#
# Copyright (C) 2012 Intel Corporation
# Author: Paul Eggleton <paul.eggleton@linux.intel.com>
import sys
import os.path
# Ensure PythonGit is installed (buildhistory_analysis needs it)
try:
import git
except ImportError:
print("Please install PythonGit 0.3.1 or later in order to use this script")
sys.exit(1)
def main():
if (len(sys.argv) < 3):
print("Report significant differences in the buildhistory repository")
print("Syntax: %s <buildhistory-path> <since-revision> [to-revision]" % os.path.basename(sys.argv[0]))
print("If to-revision is not specified, it defaults to HEAD")
sys.exit(1)
# Set path to OE lib dir so we can import the buildhistory_analysis module
newpath = os.path.abspath(os.path.dirname(os.path.abspath(sys.argv[0])) + '/../meta/lib')
sys.path = sys.path + [newpath]
import oe.buildhistory_analysis
if len(sys.argv) > 3:
torev = sys.argv[3]
else:
torev = 'HEAD'
changes = oe.buildhistory_analysis.process_changes(sys.argv[1], sys.argv[2], torev)
for chg in changes:
print('%s' % chg)
sys.exit(0)
if __name__ == "__main__":
main()