summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Bartosh <ed.bartosh@linux.intel.com>2017-06-13 16:12:18 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-06-23 11:43:36 +0100
commit86393230e0ce33bf7d6d69d3019113e704081d30 (patch)
tree2daf9747cded9bd1779f7a9f17ffc0500555ce46
parentf60520d97f53dafe783f61eb58fe249798a1e1be (diff)
downloadopenembedded-core-86393230e0ce33bf7d6d69d3019113e704081d30.tar.gz
buildhistory-diff: exclude paths from the output
Implemented -e/--exclude-path command line option to exclude paths from buildhistory-diff output. [YOCTO #11459] Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r--meta/lib/oe/buildhistory_analysis.py51
-rwxr-xr-xscripts/buildhistory-diff12
2 files changed, 43 insertions, 20 deletions
diff --git a/meta/lib/oe/buildhistory_analysis.py b/meta/lib/oe/buildhistory_analysis.py
index 3a5b7b6b44..3e86a46a3f 100644
--- a/meta/lib/oe/buildhistory_analysis.py
+++ b/meta/lib/oe/buildhistory_analysis.py
@@ -143,22 +143,25 @@ class ChangeRecord:
out += '\n '.join(list(diff)[2:])
out += '\n --'
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])
+ if self.filechanges or (self.oldvalue and self.newvalue):
+ 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, fieldname, fieldname, lineterm='')
+ out += '\n '.join(list(diff))
+ out += '\n --'
else:
- alines = self.oldvalue.splitlines()
- blines = self.newvalue.splitlines()
- diff = difflib.unified_diff(alines, blines, fieldname, fieldname, lineterm='')
- out += '\n '.join(list(diff))
- out += '\n --'
+ out = ''
else:
out = '%s changed from "%s" to "%s"' % (self.fieldname, self.oldvalue, self.newvalue)
@@ -169,7 +172,7 @@ class ChangeRecord:
for line in chg._str_internal(False).splitlines():
out += '\n * %s' % line
- return '%s%s' % (prefix, out)
+ return '%s%s' % (prefix, out) if out else ''
class FileChange:
changetype_add = 'A'
@@ -508,7 +511,8 @@ def compare_siglists(a_blob, b_blob, taskdiff=False):
return '\n'.join(out)
-def process_changes(repopath, revision1, revision2='HEAD', report_all=False, report_ver=False, sigs=False, sigsdiff=False):
+def process_changes(repopath, revision1, revision2='HEAD', report_all=False, report_ver=False,
+ sigs=False, sigsdiff=False, exclude_path=None):
repo = git.Repo(repopath)
assert repo.bare == False
commit = repo.commit(revision1)
@@ -601,6 +605,19 @@ def process_changes(repopath, revision1, revision2='HEAD', report_all=False, rep
elif chg.path == chg2.path and chg.path.startswith('packages/') and chg2.fieldname in ['PE', 'PV', 'PR']:
chg.related.append(chg2)
+ # filter out unwanted paths
+ if exclude_path:
+ for chg in changes:
+ if chg.filechanges:
+ fchgs = []
+ for fchg in chg.filechanges:
+ for epath in exclude_path:
+ if fchg.path.startswith(epath):
+ break
+ else:
+ fchgs.append(fchg)
+ chg.filechanges = fchgs
+
if report_all:
return changes
else:
diff --git a/scripts/buildhistory-diff b/scripts/buildhistory-diff
index dd9745e80c..1b2e0d1f4e 100755
--- a/scripts/buildhistory-diff
+++ b/scripts/buildhistory-diff
@@ -39,6 +39,8 @@ def main():
parser.add_option("-S", "--signatures-with-diff",
help = "Report on actual signature differences instead of output (requires signature data to have been generated, either by running the actual tasks or using bitbake -S)",
action="store_true", dest="sigsdiff", default=False)
+ parser.add_option("-e", "--exclude-path", action="append",
+ help = "exclude path from the output")
options, args = parser.parse_args(sys.argv)
@@ -75,7 +77,7 @@ def main():
sys.stderr.write("Unable to find bitbake by searching parent directory of this script or PATH\n")
sys.exit(1)
- import oe.buildhistory_analysis
+ from oe.buildhistory_analysis import process_changes
fromrev = 'build-minus-1'
torev = 'HEAD'
@@ -92,7 +94,9 @@ def main():
import gitdb
try:
- changes = oe.buildhistory_analysis.process_changes(options.buildhistory_dir, fromrev, torev, options.report_all, options.report_ver, options.sigs, options.sigsdiff)
+ changes = process_changes(options.buildhistory_dir, fromrev, torev,
+ options.report_all, options.report_ver, options.sigs,
+ options.sigsdiff, options.exclude_path)
except gitdb.exc.BadObject as e:
if len(args) == 1:
sys.stderr.write("Unable to find previous build revision in buildhistory repository\n\n")
@@ -102,7 +106,9 @@ def main():
sys.exit(1)
for chg in changes:
- print('%s' % chg)
+ out = str(chg)
+ if out:
+ print(out)
sys.exit(0)