summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2013-05-09 16:57:48 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-05-10 11:37:16 +0100
commite42f0acf46897515ae14c3b3c12632ccb2a378f2 (patch)
tree1c20e5768964b43eb2f88c1d128e2845c3178711
parent68f441e303f9a1aa37f6d4606a9fe5a94998880f (diff)
downloadpoky-e42f0acf46897515ae14c3b3c12632ccb2a378f2.tar.gz
classes/buildhistory: track contents of selected files in images
Add 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]. (From OE-Core rev: ed6bb6e3db518082d3a9c45d548bc1339be2c5ca) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/buildhistory.bbclass10
-rw-r--r--meta/lib/oe/buildhistory_analysis.py23
2 files changed, 27 insertions, 6 deletions
diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
index 8efd41cd8e..3b6ce99413 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -12,6 +12,7 @@ BUILDHISTORY_DIR ?= "${TOPDIR}/buildhistory"
12BUILDHISTORY_DIR_IMAGE = "${BUILDHISTORY_DIR}/images/${MACHINE_ARCH}/${TCLIBC}/${IMAGE_BASENAME}" 12BUILDHISTORY_DIR_IMAGE = "${BUILDHISTORY_DIR}/images/${MACHINE_ARCH}/${TCLIBC}/${IMAGE_BASENAME}"
13BUILDHISTORY_DIR_PACKAGE = "${BUILDHISTORY_DIR}/packages/${MULTIMACH_TARGET_SYS}/${PN}" 13BUILDHISTORY_DIR_PACKAGE = "${BUILDHISTORY_DIR}/packages/${MULTIMACH_TARGET_SYS}/${PN}"
14BUILDHISTORY_DIR_SDK = "${BUILDHISTORY_DIR}/sdk/${SDK_NAME}" 14BUILDHISTORY_DIR_SDK = "${BUILDHISTORY_DIR}/sdk/${SDK_NAME}"
15BUILDHISTORY_IMAGE_FILES ?= "/etc/passwd /etc/group"
15BUILDHISTORY_COMMIT ?= "0" 16BUILDHISTORY_COMMIT ?= "0"
16BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory <buildhistory@${DISTRO}>" 17BUILDHISTORY_COMMIT_AUTHOR ?= "buildhistory <buildhistory@${DISTRO}>"
17BUILDHISTORY_PUSH_REPO ?= "" 18BUILDHISTORY_PUSH_REPO ?= ""
@@ -396,6 +397,15 @@ buildhistory_get_imageinfo() {
396 397
397 buildhistory_list_files ${IMAGE_ROOTFS} ${BUILDHISTORY_DIR_IMAGE}/files-in-image.txt 398 buildhistory_list_files ${IMAGE_ROOTFS} ${BUILDHISTORY_DIR_IMAGE}/files-in-image.txt
398 399
400 # Collect files requested in BUILDHISTORY_IMAGE_FILES
401 rm -rf ${BUILDHISTORY_DIR_IMAGE}/image-files
402 for f in ${BUILDHISTORY_IMAGE_FILES}; do
403 if [ -f ${IMAGE_ROOTFS}/$f ] ; then
404 mkdir -p ${BUILDHISTORY_DIR_IMAGE}/image-files/`dirname $f`
405 cp ${IMAGE_ROOTFS}/$f ${BUILDHISTORY_DIR_IMAGE}/image-files/$f
406 fi
407 done
408
399 # Record some machine-readable meta-information about the image 409 # Record some machine-readable meta-information about the image
400 printf "" > ${BUILDHISTORY_DIR_IMAGE}/image-info.txt 410 printf "" > ${BUILDHISTORY_DIR_IMAGE}/image-info.txt
401 cat >> ${BUILDHISTORY_DIR_IMAGE}/image-info.txt <<END 411 cat >> ${BUILDHISTORY_DIR_IMAGE}/image-info.txt <<END
diff --git a/meta/lib/oe/buildhistory_analysis.py b/meta/lib/oe/buildhistory_analysis.py
index 2306bcb4bf..86b5a12347 100644
--- a/meta/lib/oe/buildhistory_analysis.py
+++ b/meta/lib/oe/buildhistory_analysis.py
@@ -52,7 +52,10 @@ class ChangeRecord:
52 52
53 def _str_internal(self, outer): 53 def _str_internal(self, outer):
54 if outer: 54 if outer:
55 prefix = '%s: ' % self.path 55 if '/image-files/' in self.path:
56 prefix = '%s: ' % self.path.split('/image-files/')[0]
57 else:
58 prefix = '%s: ' % self.path
56 else: 59 else:
57 prefix = '' 60 prefix = ''
58 61
@@ -107,16 +110,21 @@ class ChangeRecord:
107 diff = difflib.unified_diff(alines, blines, self.fieldname, self.fieldname, lineterm='') 110 diff = difflib.unified_diff(alines, blines, self.fieldname, self.fieldname, lineterm='')
108 out += '\n '.join(list(diff)[2:]) 111 out += '\n '.join(list(diff)[2:])
109 out += '\n --' 112 out += '\n --'
110 elif self.fieldname in img_monitor_files: 113 elif self.fieldname in img_monitor_files or '/image-files/' in self.path:
111 if outer: 114 fieldname = self.fieldname
112 prefix = 'Changes to %s ' % self.path 115 if '/image-files/' in self.path:
113 out = '(%s):\n ' % self.fieldname 116 fieldname = os.path.join('/' + self.path.split('/image-files/')[1], self.fieldname)
117 out = 'Changes to %s:\n ' % fieldname
118 else:
119 if outer:
120 prefix = 'Changes to %s ' % self.path
121 out = '(%s):\n ' % self.fieldname
114 if self.filechanges: 122 if self.filechanges:
115 out += '\n '.join(['%s' % i for i in self.filechanges]) 123 out += '\n '.join(['%s' % i for i in self.filechanges])
116 else: 124 else:
117 alines = self.oldvalue.splitlines() 125 alines = self.oldvalue.splitlines()
118 blines = self.newvalue.splitlines() 126 blines = self.newvalue.splitlines()
119 diff = difflib.unified_diff(alines, blines, self.fieldname, self.fieldname, lineterm='') 127 diff = difflib.unified_diff(alines, blines, fieldname, fieldname, lineterm='')
120 out += '\n '.join(list(diff)) 128 out += '\n '.join(list(diff))
121 out += '\n --' 129 out += '\n --'
122 else: 130 else:
@@ -393,6 +401,9 @@ def process_changes(repopath, revision1, revision2 = 'HEAD', report_all = False)
393 changes.append(chg) 401 changes.append(chg)
394 elif filename == 'image-info.txt': 402 elif filename == 'image-info.txt':
395 changes.extend(compare_dict_blobs(path, d.a_blob, d.b_blob, report_all)) 403 changes.extend(compare_dict_blobs(path, d.a_blob, d.b_blob, report_all))
404 elif '/image-files/' in path:
405 chg = ChangeRecord(path, filename, d.a_blob.data_stream.read(), d.b_blob.data_stream.read(), True)
406 changes.append(chg)
396 407
397 # Look for added preinst/postinst/prerm/postrm 408 # Look for added preinst/postinst/prerm/postrm
398 # (without reporting newly added recipes) 409 # (without reporting newly added recipes)