mirror of https://github.com/ARMmbed/mbed-os.git
Implement and test filtering resources by libraries
parent
e10adffa31
commit
e2849e6201
|
|
@ -126,6 +126,9 @@ class Resources(object):
|
|||
# publicly accessible things
|
||||
self.ignored_dirs = []
|
||||
|
||||
# library requirements
|
||||
self._libs_filtered = None
|
||||
|
||||
# Pre-mbed 2.0 ignore dirs
|
||||
self._legacy_ignore_dirs = (LEGACY_IGNORE_DIRS)
|
||||
|
||||
|
|
@ -257,7 +260,25 @@ class Resources(object):
|
|||
|
||||
def get_file_refs(self, file_type):
|
||||
"""Return a list of FileRef for every file of the given type"""
|
||||
return list(self._file_refs[file_type])
|
||||
if self._libs_filtered is None:
|
||||
return list(self._file_refs[file_type])
|
||||
else:
|
||||
to_ret = []
|
||||
for ref in self._file_refs[file_type]:
|
||||
_, path = ref
|
||||
if not any(
|
||||
path.startswith(dirname(e.path)) for e in self._excluded_libs
|
||||
):
|
||||
to_ret.append(ref)
|
||||
return to_ret
|
||||
|
||||
def filter_by_libraries(self, library_refs):
|
||||
"""
|
||||
Call after completely done scanning to filter resources based on
|
||||
libraries
|
||||
"""
|
||||
self._libs_filtered = library_refs
|
||||
self._excluded_libs = set(self._file_refs[FileType.JSON]) - set(library_refs)
|
||||
|
||||
def _get_from_refs(self, file_type, key):
|
||||
return sorted([key(f) for f in self.get_file_refs(file_type)])
|
||||
|
|
|
|||
|
|
@ -99,6 +99,31 @@ class ResourcesTest(unittest.TestCase):
|
|||
assert(" not-main.o " in error_messages)
|
||||
assert(" main.o " in error_messages)
|
||||
|
||||
def test_filter_by_all_libraries(self):
|
||||
"""
|
||||
Assert something
|
||||
"""
|
||||
res = Resources(MockNotifier())
|
||||
res._add_labels('TARGET', ['K64F'])
|
||||
res._add_labels('TARGET', ['FRDM'])
|
||||
for name, loc in SRC_PATHS.items():
|
||||
res.add_directory(loc, into_path=name)
|
||||
res.filter_by_libraries(res.get_file_refs(FileType.JSON))
|
||||
assert("main.cpp" in res.get_file_names(FileType.CPP_SRC))
|
||||
|
||||
def test_filter_by_bm_lib(self):
|
||||
res = Resources(MockNotifier())
|
||||
res._add_labels('TARGET', ['K64F'])
|
||||
res._add_labels('TARGET', ['FRDM'])
|
||||
for name, loc in SRC_PATHS.items():
|
||||
res.add_directory(loc, into_path=name)
|
||||
res.win_to_unix()
|
||||
res.filter_by_libraries(
|
||||
ref for ref in res.get_file_refs(FileType.JSON)
|
||||
if "/bm/" in ref.name
|
||||
)
|
||||
assert("main.cpp" not in res.get_file_names(FileType.CPP_SRC))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
|||
Loading…
Reference in New Issue