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:
Elliot Smith 2015-09-21 19:42:35 -07:00 committed by Richard Purdie
parent 767fe69fd0
commit 15b482b16b
1 changed files with 17 additions and 14 deletions

View File

@ -338,26 +338,29 @@ class ORMWrapper(object):
files = filedata['files']
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("/"))):
(user, group, size) = d[1:4]
permission = d[0][1:]
path = d[4].lstrip(".")
# we already created the root directory, so ignore any
# entry for it
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
parent_path = "/".join(path.split("/")[:len(path.split("/")) - 1])
if len(parent_path) == 0:
parent_path = "/"