cooker|command|event: add new command findFilesMatchingInDir

This command can be used to search each BBPATH for files in the passed
directory which have a filename matching the supplied pattern.

This is implemented for use from the GUI (to determine the available
PACKAGE_CLASSES) but has been written so as to be generically useful and
reusable.

(Bitbake rev: 2a599812a57cb0b964880a6a2b7548423497ea92)

Signed-off-by: Joshua Lock <josh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Joshua Lock 2011-06-30 23:02:52 -07:00 committed by Richard Purdie
parent 9fe29fd7db
commit 6c36f4a6aa
3 changed files with 45 additions and 0 deletions

View File

@ -251,6 +251,18 @@ class CommandsAsync:
command.finishAsyncCommand()
findConfigFiles.needcache = True
def findFilesMatchingInDir(self, command, params):
"""
Find implementation files matching the specified pattern
in the requested subdirectory of a BBPATH
"""
pattern = params[0]
directory = params[1]
command.cooker.findFilesMatchingInDir(pattern, directory)
command.finishAsyncCommand()
findFilesMatchingInDir.needcache = True
def findConfigFilePath(self, command, params):
"""
Find the path of the requested configuration file

View File

@ -520,6 +520,29 @@ class BBCooker:
path = self._findConfigFile(configfile)
bb.event.fire(bb.event.ConfigFilePathFound(path), self.configuration.data)
def findFilesMatchingInDir(self, filepattern, directory):
"""
Searches for files matching the regex 'pattern' which are children of
'directory' in each BBPATH. i.e. to find all rootfs package classes available
to BitBake one could call findFilesMatchingInDir(self, 'rootfs_', 'classes')
or to find all machine configuration files on could call
findFilesMatchingInDir(self, 'conf/machines', 'conf')
"""
import re
matches = []
p = re.compile(re.escape(filepattern))
bbpaths = bb.data.getVar('BBPATH', self.configuration.data, True).split(':')
for path in bbpaths:
dirpath = os.path.join(path, directory)
if os.path.exists(dirpath):
for root, dirs, files in os.walk(dirpath):
for f in files:
if p.search(f):
matches.append(f)
bb.event.fire(bb.event.FilesMatchingFound(filepattern, matches), self.configuration.data)
def findConfigFiles(self, varname):
"""
Find config files which are appropriate values for varname.

View File

@ -390,6 +390,16 @@ class TargetsTreeGenerated(Event):
Event.__init__(self)
self._model = model
class FilesMatchingFound(Event):
"""
Event when a list of files matching the supplied pattern has
been generated
"""
def __init__(self, pattern, matches):
Event.__init__(self)
self._pattern = pattern
self._matches = matches
class ConfigFilesFound(Event):
"""
Event when a list of appropriate config files has been generated