Merge pull request #112 from SeppoTakalo/master

Implement the .mbedignore functionality.
Sam Grove 2016-05-23 23:30:44 +08:00
commit 6c3ce1ea64
1 changed files with 34 additions and 4 deletions

View File

@ -17,7 +17,7 @@ limitations under the License.
import re import re
import sys import sys
from os import stat, walk, getcwd from os import stat, walk, getcwd, sep
from copy import copy from copy import copy
from time import time, sleep from time import time, sleep
from types import ListType from types import ListType
@ -32,6 +32,7 @@ from tools.utils import run_cmd, mkdir, rel_path, ToolException, NotSupportedExc
from tools.settings import BUILD_OPTIONS, MBED_ORG_USER from tools.settings import BUILD_OPTIONS, MBED_ORG_USER
import tools.hooks as hooks import tools.hooks as hooks
from hashlib import md5 from hashlib import md5
import fnmatch
#Disables multiprocessing if set to higher number than the host machine CPUs #Disables multiprocessing if set to higher number than the host machine CPUs
@ -167,6 +168,7 @@ LEGACY_TOOLCHAIN_NAMES = {
class mbedToolchain: class mbedToolchain:
VERBOSE = True VERBOSE = True
ignorepatterns = []
CORTEX_SYMBOLS = { CORTEX_SYMBOLS = {
"Cortex-M0" : ["__CORTEX_M0", "ARM_MATH_CM0", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM"], "Cortex-M0" : ["__CORTEX_M0", "ARM_MATH_CM0", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM"],
@ -345,6 +347,12 @@ class mbedToolchain:
return False return False
def is_ignored(self, file_path):
for pattern in self.ignorepatterns:
if fnmatch.fnmatch(file_path, pattern):
return True
return False
def scan_resources(self, path, exclude_paths=None): def scan_resources(self, path, exclude_paths=None):
labels = self.get_labels() labels = self.get_labels()
resources = Resources(path) resources = Resources(path)
@ -372,10 +380,28 @@ class mbedToolchain:
if ((d.startswith('.') or d in self.legacy_ignore_dirs) or if ((d.startswith('.') or d in self.legacy_ignore_dirs) or
(d.startswith('TARGET_') and d[7:] not in labels['TARGET']) or (d.startswith('TARGET_') and d[7:] not in labels['TARGET']) or
(d.startswith('TOOLCHAIN_') and d[10:] not in labels['TOOLCHAIN']) or (d.startswith('TOOLCHAIN_') and d[10:] not in labels['TOOLCHAIN']) or
(d == 'TESTS') or (d == 'TESTS')):
exists(join(dir_path, '.buildignore'))):
dirs.remove(d) dirs.remove(d)
# Check if folder contains .mbedignore
try:
with open (join(dir_path,".mbedignore"), "r") as f:
lines=f.readlines()
lines = [l.strip() for l in lines] # Strip whitespaces
lines = [l for l in lines if l != ""] # Strip empty lines
lines = [l for l in lines if not re.match("^#",l)] # Strip comment lines
# Append root path to glob patterns
# and append patterns to ignorepatterns
self.ignorepatterns.extend([join(dir_path,line.strip()) for line in lines])
except IOError:
pass
# Remove dirs that already match the ignorepatterns
# to avoid travelling into them and to prevent them
# on appearing in include path.
if self.is_ignored(join(dir_path,"")):
dirs.remove(d)
if exclude_paths: if exclude_paths:
for exclude_path in exclude_paths: for exclude_path in exclude_paths:
rel_path = relpath(dir_path, exclude_path) rel_path = relpath(dir_path, exclude_path)
@ -388,6 +414,10 @@ class mbedToolchain:
for file in files: for file in files:
file_path = join(root, file) file_path = join(root, file)
if self.is_ignored(file_path):
continue
_, ext = splitext(file) _, ext = splitext(file)
ext = ext.lower() ext = ext.lower()