bitbake: toaster: Add fake entry to Target_File for filesystem root
The files-in-image.txt file is produced by bitbake after an image is created, listing all the files in the image. However, this list doesn't include the root directory ('/'). buildinfohelper.py then tries to construct the filesystem tree from this file, assuming that every directory apart from the root directory (which is special-cased) can be assigned a parent. But because the root directory isn't listed in files-in-image.txt, an object for the root directory is never created. The direct subdirectories of the root ('./bin', './usr' etc.) then can't be assigned a parent directory, as the object representing the root directory doesn't exist. This results in a Target_File lookup error and causes the directory listing page to fail. Fix this by creating a fake entry for the root directory in the Target_File table, so that the direct subdirectories of / can be assigned a parent. Note that it doesn't matter that the root is faked, as its properties are never shown in the directory structure tree. [YOCTO #8280] (Bitbake rev: a4015768183e5a3fa39a6c2b4dea0088ca182d80) Signed-off-by: Elliot Smith <elliot.smith@intel.com> Signed-off-by: brian avery <avery.brian@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
767fe69fd0
commit
15b482b16b
|
@ -338,26 +338,29 @@ class ORMWrapper(object):
|
||||||
files = filedata['files']
|
files = filedata['files']
|
||||||
syms = filedata['syms']
|
syms = filedata['syms']
|
||||||
|
|
||||||
# we insert directories, ordered by name depth
|
# always create the root directory as a special case;
|
||||||
|
# note that this is never displayed, so the owner, group,
|
||||||
|
# size, permission are irrelevant
|
||||||
|
tf_obj = Target_File.objects.create(target = target_obj,
|
||||||
|
path = '/',
|
||||||
|
size = 0,
|
||||||
|
owner = '',
|
||||||
|
group = '',
|
||||||
|
permission = '',
|
||||||
|
inodetype = Target_File.ITYPE_DIRECTORY)
|
||||||
|
tf_obj.save()
|
||||||
|
|
||||||
|
# insert directories, ordered by name depth
|
||||||
for d in sorted(dirs, key=lambda x:len(x[-1].split("/"))):
|
for d in sorted(dirs, key=lambda x:len(x[-1].split("/"))):
|
||||||
(user, group, size) = d[1:4]
|
(user, group, size) = d[1:4]
|
||||||
permission = d[0][1:]
|
permission = d[0][1:]
|
||||||
path = d[4].lstrip(".")
|
path = d[4].lstrip(".")
|
||||||
|
|
||||||
|
# we already created the root directory, so ignore any
|
||||||
|
# entry for it
|
||||||
if len(path) == 0:
|
if len(path) == 0:
|
||||||
# we create the root directory as a special case
|
|
||||||
path = "/"
|
|
||||||
tf_obj = Target_File.objects.create(
|
|
||||||
target = target_obj,
|
|
||||||
path = path,
|
|
||||||
size = size,
|
|
||||||
inodetype = Target_File.ITYPE_DIRECTORY,
|
|
||||||
permission = permission,
|
|
||||||
owner = user,
|
|
||||||
group = group,
|
|
||||||
)
|
|
||||||
tf_obj.directory = tf_obj
|
|
||||||
tf_obj.save()
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
parent_path = "/".join(path.split("/")[:len(path.split("/")) - 1])
|
parent_path = "/".join(path.split("/")[:len(path.split("/")) - 1])
|
||||||
if len(parent_path) == 0:
|
if len(parent_path) == 0:
|
||||||
parent_path = "/"
|
parent_path = "/"
|
||||||
|
|
Loading…
Reference in New Issue