classes/buildhistory: save preinst/postinst/prerm/postrm
Write the value of these package script variables into the packageinfo so that any changes to them can be tracked (in separate files since they are multi-line). Inspired by an earlier patch from Andreas Müller <schnitzeltony@googlemail.com> (From OE-Core rev: 988a417c857c01c87de6ba9602968059cf8d830f) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
78d8faf4e1
commit
c0149ac6c4
|
@ -57,6 +57,8 @@ python buildhistory_emit_pkghistory() {
|
|||
self.rrecommends = ""
|
||||
self.files = ""
|
||||
self.filelist = ""
|
||||
# Variables that need to be written to their own separate file
|
||||
self.filevars = dict.fromkeys(['pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm'])
|
||||
|
||||
# Should check PACKAGES here to see if anything removed
|
||||
|
||||
|
@ -167,6 +169,8 @@ python buildhistory_emit_pkghistory() {
|
|||
pkginfo.rdepends = sortpkglist(squashspaces(getpkgvar(pkg, 'RDEPENDS') or ""))
|
||||
pkginfo.rrecommends = sortpkglist(squashspaces(getpkgvar(pkg, 'RRECOMMENDS') or ""))
|
||||
pkginfo.files = squashspaces(getpkgvar(pkg, 'FILES') or "")
|
||||
for filevar in pkginfo.filevars:
|
||||
pkginfo.filevars[filevar] = getpkgvar(pkg, filevar)
|
||||
|
||||
# Gather information about packaged files
|
||||
pkgdestpkg = os.path.join(pkgdest, pkg)
|
||||
|
@ -191,16 +195,13 @@ def write_recipehistory(rcpinfo, d):
|
|||
pkghistdir = d.getVar('BUILDHISTORY_DIR_PACKAGE', True)
|
||||
|
||||
infofile = os.path.join(pkghistdir, "latest")
|
||||
f = open(infofile, "w")
|
||||
try:
|
||||
with open(infofile, "w") as f:
|
||||
if rcpinfo.pe != "0":
|
||||
f.write("PE = %s\n" % rcpinfo.pe)
|
||||
f.write("PV = %s\n" % rcpinfo.pv)
|
||||
f.write("PR = %s\n" % rcpinfo.pr)
|
||||
f.write("DEPENDS = %s\n" % rcpinfo.depends)
|
||||
f.write("PACKAGES = %s\n" % rcpinfo.packages)
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
|
||||
def write_pkghistory(pkginfo, d):
|
||||
|
@ -213,8 +214,7 @@ def write_pkghistory(pkginfo, d):
|
|||
os.makedirs(pkgpath)
|
||||
|
||||
infofile = os.path.join(pkgpath, "latest")
|
||||
f = open(infofile, "w")
|
||||
try:
|
||||
with open(infofile, "w") as f:
|
||||
if pkginfo.pe != "0":
|
||||
f.write("PE = %s\n" % pkginfo.pe)
|
||||
f.write("PV = %s\n" % pkginfo.pv)
|
||||
|
@ -224,8 +224,16 @@ def write_pkghistory(pkginfo, d):
|
|||
f.write("PKGSIZE = %d\n" % pkginfo.size)
|
||||
f.write("FILES = %s\n" % pkginfo.files)
|
||||
f.write("FILELIST = %s\n" % pkginfo.filelist)
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
for filevar in pkginfo.filevars:
|
||||
filevarpath = os.path.join(pkgpath, "latest.%s" % filevar)
|
||||
val = pkginfo.filevars[filevar]
|
||||
if val:
|
||||
with open(filevarpath, "w") as f:
|
||||
f.write(val)
|
||||
else:
|
||||
if os.path.exists(filevarpath):
|
||||
os.unlink(filevarpath)
|
||||
|
||||
|
||||
buildhistory_get_image_installed() {
|
||||
|
|
|
@ -90,6 +90,18 @@ class ChangeRecord:
|
|||
else:
|
||||
percentchg = 100
|
||||
out = '%s changed from %s to %s (%s%d%%)' % (self.fieldname, self.oldvalue or "''", self.newvalue or "''", '+' if percentchg > 0 else '', percentchg)
|
||||
elif self.fieldname in ['pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm']:
|
||||
if self.oldvalue and self.newvalue:
|
||||
out = '%s changed:\n ' % self.fieldname
|
||||
elif self.newvalue:
|
||||
out = '%s added:\n ' % self.fieldname
|
||||
elif self.oldvalue:
|
||||
out = '%s cleared:\n ' % self.fieldname
|
||||
alines = self.oldvalue.splitlines()
|
||||
blines = self.newvalue.splitlines()
|
||||
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
|
||||
|
@ -330,7 +342,12 @@ def process_changes(repopath, revision1, revision2 = 'HEAD', report_all = False)
|
|||
for d in diff.iter_change_type('M'):
|
||||
path = os.path.dirname(d.a_blob.path)
|
||||
if path.startswith('packages/'):
|
||||
changes.extend(compare_dict_blobs(path, d.a_blob, d.b_blob, report_all))
|
||||
filename = os.path.basename(d.a_blob.path)
|
||||
if filename == 'latest':
|
||||
changes.extend(compare_dict_blobs(path, d.a_blob, d.b_blob, report_all))
|
||||
elif filename.startswith('latest.'):
|
||||
chg = ChangeRecord(path, filename, d.a_blob.data_stream.read(), d.b_blob.data_stream.read(), True)
|
||||
changes.append(chg)
|
||||
elif path.startswith('images/'):
|
||||
filename = os.path.basename(d.a_blob.path)
|
||||
if filename in img_monitor_files:
|
||||
|
@ -356,6 +373,37 @@ def process_changes(repopath, revision1, revision2 = 'HEAD', report_all = False)
|
|||
elif filename == 'image-info.txt':
|
||||
changes.extend(compare_dict_blobs(path, d.a_blob, d.b_blob, report_all))
|
||||
|
||||
# Look for added preinst/postinst/prerm/postrm
|
||||
# (without reporting newly added recipes)
|
||||
addedpkgs = []
|
||||
addedchanges = []
|
||||
for d in diff.iter_change_type('A'):
|
||||
path = os.path.dirname(d.b_blob.path)
|
||||
if path.startswith('packages/'):
|
||||
filename = os.path.basename(d.b_blob.path)
|
||||
if filename == 'latest':
|
||||
addedpkgs.append(path)
|
||||
elif filename.startswith('latest.'):
|
||||
chg = ChangeRecord(path, filename[7:], '', d.b_blob.data_stream.read(), True)
|
||||
addedchanges.append(chg)
|
||||
for chg in addedchanges:
|
||||
found = False
|
||||
for pkg in addedpkgs:
|
||||
if chg.path.startswith(pkg):
|
||||
found = True
|
||||
break
|
||||
if not found:
|
||||
changes.append(chg)
|
||||
|
||||
# Look for cleared preinst/postinst/prerm/postrm
|
||||
for d in diff.iter_change_type('D'):
|
||||
path = os.path.dirname(d.a_blob.path)
|
||||
if path.startswith('packages/'):
|
||||
filename = os.path.basename(d.a_blob.path)
|
||||
if filename != 'latest' and filename.startswith('latest.'):
|
||||
chg = ChangeRecord(path, filename[7:], d.a_blob.data_stream.read(), '', True)
|
||||
changes.append(chg)
|
||||
|
||||
# Link related changes
|
||||
for chg in changes:
|
||||
if chg.monitored:
|
||||
|
|
Loading…
Reference in New Issue