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:
parent
9fe29fd7db
commit
6c36f4a6aa
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue