def __init__(self, main_dir): self.__main_dir = main_dir self.scanner = FileScanner() self.dep_scanner = DependecyScanner() self.src_path = self.main_dir() + '/' + CONST.SRC_DIR self.include_path = self.main_dir() + '/' + CONST.INCLUDE_DIR
class DependecyInitializer(Initializer): def __init__(self, main_dir): self.__main_dir = main_dir self.scanner = FileScanner() self.dep_scanner = DependecyScanner() self.src_path = self.main_dir() + '/' + CONST.SRC_DIR self.include_path = self.main_dir() + '/' + CONST.INCLUDE_DIR def main_dir(self): return self.__main_dir def __clean(self, file): _, dependecies = self.dep_scanner.scan_dependecy(src_path=self.src_path, file=file, include_path=self.include_path) hashed_file = self.dep_scanner.generate_checksum(file=file, src_path=self.src_path) if file.endswith(CONST.SOURCE_EXT): db_manager.save_dependecy(file=file, dependencies=dependecies, hashed_file=hashed_file, rebuild=True) else: db_manager.save_dependecy(file=file, dependencies=dependecies, hashed_file=hashed_file) def __clean_build(self): for file in self.scanner.scan_sources(main_dir=self.src_path, filter=(CONST.SOURCE_EXT, CONST.HEADER_EXT)): #self.__clean(file=file) if threading.active_count() < multiprocessing.cpu_count(): t = threading.Thread(target=self.__clean, args=(file,)) t.start() else: self.__clean(file) main_thread = threading.currentThread() for t in threading.enumerate(): if t is main_thread: continue t.join() def __update_build(self): headers = set() file_list = list() # import config.helpers as helpers # helpers.ls_database(self.db_manager) for file in self.scanner.scan_sources(main_dir=self.src_path, filter=(CONST.SOURCE_EXT, CONST.HEADER_EXT)): file_list.append(file) checksum = db_manager.get_file_checksum(file) hashed_file = self.dep_scanner.generate_checksum(file=file, src_path=self.src_path) if hashed_file != checksum: logging.debug("Checksum changed for file: %s", file) _, dependecies = self.dep_scanner.scan_dependecy(src_path=self.src_path, file=file, include_path=self.include_path) if file.endswith(CONST.SOURCE_EXT): db_manager.save_dependecy(file=file, dependencies=dependecies, hashed_file=hashed_file, rebuild=True) else: db_manager.save_dependecy(file=file, dependencies=dependecies, hashed_file=hashed_file) headers.add(file) db_manager.rebuild_related_header_sources(headers) db_manager.delete_unused_file(file_list) def init(self): if db_manager.check_if_empty(): logging.info("Clean build") self.__clean_build() else: logging.info("Update build") self.__update_build()