buildhistory improvements
cover buildhistory improvements
The following changes since commit 2253e9f12734c6e6aa489942b5e4628eca1fa29d:
classes/lib: Fix getcmdstatus breakage (2013-05-09 16:05:02 +0100)
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib paule/buildhistory-7
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/buildhistory-7
Paul Eggleton (2):
buildhistory-diff: improve bad command-line argument handling classes/buildhistory: track contents of selected files in images
meta/classes/buildhistory.bbclass | 10 ++++++++++ meta/lib/oe/buildhistory_analysis.py | 23 +++++++++++++++++------ scripts/buildhistory-diff | 22 +++++++++++++++++----- 3 files changed, 44 insertions(+), 11 deletions(-)
Signature · 1 line
1.8.1.2
PATCH 1/2 buildhistory-diff: improve bad command-line argument handling
* Check for existence of specified buildhistory directory and show a proper error message if it doesn't
* Show an error message instead of a traceback with a mangled revision if one of the specified git revisions is invalid
* Show usage information if --help is specified
* Write error messages to stderr
Fixes [YOCTO #4313].
--- scripts/buildhistory-diff | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-)
scripts/buildhistory-diff +17 -5
@@ -2,7 +2,7 @@ # Report significant differences in the buildhistory repository since a specific revision # -# Copyright (C) 2012 Intel Corporation +# Copyright (C) 2013 Intel Corporation # Author: Paul Eggleton <[email protected]> import sys
@@ -18,10 +18,10 @@ except ImportError: def main(): if LooseVersion(git.__version__) < '0.3.1': - print("Version of GitPython is too old, please install GitPython (python-git) 0.3.1 or later in order to use this script") + 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(sys.argv) < 3): + if len(sys.argv) < 3 or '--help' in sys.argv: 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")
@@ -41,17 +41,29 @@ def main(): bitbakepath = os.path.abspath(os.path.join(pth, '..')) break if not bitbakepath: - print("Unable to find bitbake by searching parent directory of this script or PATH") + sys.stderr.write("Unable to find bitbake by searching parent directory of this script or PATH\n") sys.exit(1) sys.path[0:0] = [newpath, bitbakepath + '/lib'] import oe.buildhistory_analysis + buildhistory_dir = sys.argv[1] + if not os.path.exists(buildhistory_dir): + sys.stderr.write('Specified buildhistory directory "%s" does not exist\n' % buildhistory_dir) + sys.exit(1) + 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) + + import gitdb + try: + changes = oe.buildhistory_analysis.process_changes(buildhistory_dir, sys.argv[2], torev) + except gitdb.exc.BadObject as e: + sys.stderr.write('Specified git revision "%s" is not valid\n' % e.args[0]) + sys.exit(1) + for chg in changes: print('%s' % chg)
Signature · 1 line
1.8.1.2
PATCH 2/2 classes/buildhistory: track contents of selected files in images
In reply to Paul EggletonAdd a BUILDHISTORY_IMAGE_FILES variable specifying a space-separated list of files within an image to copy into buildhistory, so that changes to them can be tracked. Typically this would be used for configuration files, and by default this includes /etc/passwd and /etc/group, but the user is free to extend this list by setting the variable in local.conf.
Implements [YOCTO #4154].
--- meta/classes/buildhistory.bbclass | 10 ++++++++++ meta/lib/oe/buildhistory_analysis.py | 23 +++++++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-)
meta/classes/buildhistory.bbclass +10 -0
@@ -12,6 +12,7 @@ BUILDHISTORY_DIR ?= "${TOPDIR}/buildhistory" BUILDHISTORY_DIR_IMAGE = "${BUILDHISTORY_DIR}/images/${MACHINE_ARCH}/${TCLIBC}/${IMAGE_BASENAME}" BUILDHISTORY_DIR_PACKAGE = "${BUILDHISTORY_DIR}/packages/${MULTIMACH_TARGET_SYS}/${PN}" BUILDHISTORY_DIR_SDK = "${BUILDHISTORY_DIR}/sdk/${SDK_NAME}" +BUILDHISTORY_IMAGE_FILES ?= "/etc/passwd /etc/group" BUILDHISTORY_COMMIT ?= "0" BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory <buildhistory@${DISTRO}>" BUILDHISTORY_PUSH_REPO ?= ""
@@ -396,6 +397,15 @@ buildhistory_get_imageinfo() { buildhistory_list_files ${IMAGE_ROOTFS} ${BUILDHISTORY_DIR_IMAGE}/files-in-image.txt + # Collect files requested in BUILDHISTORY_IMAGE_FILES + rm -rf ${BUILDHISTORY_DIR_IMAGE}/image-files + for f in ${BUILDHISTORY_IMAGE_FILES}; do + if [ -f ${IMAGE_ROOTFS}/$f ] ; then + mkdir -p ${BUILDHISTORY_DIR_IMAGE}/image-files/`dirname $f` + cp ${IMAGE_ROOTFS}/$f ${BUILDHISTORY_DIR_IMAGE}/image-files/$f + fi + done + # Record some machine-readable meta-information about the image printf "" > ${BUILDHISTORY_DIR_IMAGE}/image-info.txt cat >> ${BUILDHISTORY_DIR_IMAGE}/image-info.txt <<END
meta/lib/oe/buildhistory_analysis.py +17 -6
@@ -52,7 +52,10 @@ class ChangeRecord: def _str_internal(self, outer): if outer: - prefix = '%s: ' % self.path + if '/image-files/' in self.path: + prefix = '%s: ' % self.path.split('/image-files/')[0] + else: + prefix = '%s: ' % self.path else: prefix = ''
@@ -107,16 +110,21 @@ class ChangeRecord: diff = difflib.unified_diff(alines, blines, self.fieldname, self.fieldname, lineterm='') out += '\n '.join(list(diff)[2:]) out += '\n --' - elif self.fieldname in img_monitor_files: - if outer: - prefix = 'Changes to %s ' % self.path - out = '(%s):\n ' % self.fieldname + elif self.fieldname in img_monitor_files or '/image-files/' in self.path: + fieldname = self.fieldname + if '/image-files/' in self.path: + fieldname = os.path.join('/' + self.path.split('/image-files/')[1], self.fieldname) + out = 'Changes to %s:\n ' % fieldname + else: + if outer: + prefix = 'Changes to %s ' % self.path + out = '(%s):\n ' % self.fieldname if self.filechanges: out += '\n '.join(['%s' % i for i in self.filechanges]) else: alines = self.oldvalue.splitlines() blines = self.newvalue.splitlines() - diff = difflib.unified_diff(alines, blines, self.fieldname, self.fieldname, lineterm='') + diff = difflib.unified_diff(alines, blines, fieldname, fieldname, lineterm='') out += '\n '.join(list(diff)) out += '\n --' else:
@@ -393,6 +401,9 @@ def process_changes(repopath, revision1, revision2 = 'HEAD', report_all = False) changes.append(chg) elif filename == 'image-info.txt': changes.extend(compare_dict_blobs(path, d.a_blob, d.b_blob, report_all)) + elif '/image-files/' in path: + chg = ChangeRecord(path, filename, d.a_blob.data_stream.read(), d.b_blob.data_stream.read(), True) + changes.append(chg) # Look for added preinst/postinst/prerm/postrm # (without reporting newly added recipes)
Signature · 1 line
1.8.1.2
Re: [PATCH 2/2] classes/buildhistory: track contents of selected files in images
Quoted 9 lines · Paul Eggleton
Add a
BUILDHISTORY_IMAGE_FILESvariable specifying a space-separated list of files within an image to copy into buildhistory, so that changes to them can be tracked. Typically this would be used for configuration files, and by default this includes/etc/passwdand/etc/group, but the user is free to extend this list by setting the variable in local.conf.Implements [YOCTO #4154].
Signed-off-by Paul Eggleton <[email protected]>
This is awesome :-) Thanks by looking at it.
--
Otavio Salvador O.S. Systems
E-mail: [email protected] http://www.ossystems.com.br
Mobile: +55 53 9981-7854 http://projetos.ossystems.com.br