| import re |
| import subprocess |
| |
| import checksymbolslib.br as br |
| import checksymbolslib.kconfig as kconfig |
| import checksymbolslib.makefile as makefile |
| |
| |
| file_types = [ |
| kconfig, |
| makefile, |
| ] |
| |
| |
| def get_list_of_files_in_the_repo(): |
| cmd = ['git', 'ls-files'] |
| p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
| stdout = p.communicate()[0] |
| processed_output = [str(line.decode().rstrip()) for line in stdout.splitlines() if line] |
| return processed_output |
| |
| |
| def get_list_of_files_to_process(all_files): |
| files_to_process = [] |
| for f in all_files: |
| if br.file_belongs_to_an_ignored_diretory(f): |
| continue |
| for t in file_types: |
| if t.check_filename(f): |
| files_to_process.append(f) |
| break |
| return files_to_process |
| |
| |
| def get_list_of_filenames_with_pattern(all_files, exclude_list, pattern): |
| re_pattern = re.compile(r'{}'.format(pattern)) |
| matching_filenames = [] |
| for filename in all_files: |
| if re_pattern.search(filename): |
| if filename not in exclude_list: |
| matching_filenames.append(filename) |
| return matching_filenames |
| |
| |
| def read_file(filename): |
| file_content_raw = [] |
| with open(filename, 'r', errors='surrogateescape') as f: |
| for lineno, text in enumerate(f.readlines()): |
| file_content_raw.append([lineno + 1, text]) |
| return file_content_raw |
| |
| |
| def cleanup_file_content(file_content_raw): |
| cleaned_up_content = [] |
| continuation = False |
| last_line = None |
| first_lineno = None |
| for cur_lineno, cur_line in file_content_raw: |
| if continuation: |
| line = last_line + cur_line |
| lineno = first_lineno |
| else: |
| line = cur_line |
| lineno = cur_lineno |
| continuation = False |
| last_line = None |
| first_lineno = None |
| clean_line = line.rstrip('\n') |
| if clean_line.endswith('\\'): |
| continuation = True |
| last_line = clean_line.rstrip('\\') |
| first_lineno = lineno |
| continue |
| cleaned_up_content.append([lineno, clean_line]) |
| return cleaned_up_content |
| |
| |
| def populate_db_from_file(db, filename): |
| file_content_raw = read_file(filename) |
| file_content_to_process = cleanup_file_content(file_content_raw) |
| for t in file_types: |
| if t.check_filename(filename): |
| t.populate_db(db, filename, file_content_to_process) |