classes/buildhistory: handle packaged files with names containing spaces

The FILELIST field of the package info file in the buildhistory
repository is a space-separated list of all of the files in the package.
If a name of a file packaged by a recipe contains a space character then
of course the result was that we didn't handle its name properly. To fix
that, use quotes around any filename containing spaces and at the other
end use these quotes to extract the proper entries.

Fixes [YOCTO #12742].

(From OE-Core rev: 801b705957dc683030d11393f43407d0b3506b6a)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2018-07-11 16:56:50 +02:00 committed by Richard Purdie
parent 0bbb80d381
commit 2e8787593f
2 changed files with 14 additions and 5 deletions

View File

@ -77,6 +77,7 @@ python buildhistory_emit_pkghistory() {
import re
import json
import shlex
import errno
pkghistdir = d.getVar('BUILDHISTORY_DIR_PACKAGE')
@ -287,7 +288,7 @@ python buildhistory_emit_pkghistory() {
dictval = json.loads(val)
filelist = list(dictval.keys())
filelist.sort()
pkginfo.filelist = " ".join(filelist)
pkginfo.filelist = " ".join([shlex.quote(x) for x in filelist])
pkginfo.size = int(pkgdata['PKGSIZE'])

View File

@ -13,6 +13,7 @@ import os.path
import difflib
import git
import re
import shlex
import hashlib
import collections
import bb.utils
@ -115,10 +116,13 @@ class ChangeRecord:
aitems = pkglist_combine(depvera)
bitems = pkglist_combine(depverb)
else:
aitems = self.oldvalue.split()
bitems = self.newvalue.split()
if self.fieldname == 'FILELIST':
aitems = shlex.split(self.oldvalue)
bitems = shlex.split(self.newvalue)
renamed_dirs, aitems, bitems = detect_renamed_dirs(aitems, bitems)
else:
aitems = self.oldvalue.split()
bitems = self.newvalue.split()
removed = list(set(aitems) - set(bitems))
added = list(set(bitems) - set(aitems))
@ -409,9 +413,13 @@ def compare_dict_blobs(path, ablob, bblob, report_all, report_ver):
(depvera, depverb) = compare_pkg_lists(astr, bstr)
if depvera == depverb:
continue
alist = astr.split()
if key == 'FILELIST':
alist = shlex.split(astr)
blist = shlex.split(bstr)
else:
alist = astr.split()
blist = bstr.split()
alist.sort()
blist = bstr.split()
blist.sort()
# We don't care about the removal of self-dependencies
if pkgname in alist and not pkgname in blist: