From ed6bb6e3db518082d3a9c45d548bc1339be2c5ca Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Thu, 9 May 2013 16:57:48 +0100 Subject: 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]. Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- meta/lib/oe/buildhistory_analysis.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'meta/lib') 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: 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) -- cgit 1.2.3-korg