def check(self, patch_string, fs=None): """Check style in the given patch.""" fs = fs or FileSystem() patch_string = string_utils.decode(patch_string, target_type=str) patch_files = DiffParser(patch_string.splitlines()).files # If the user uses git, checking subversion config file only once is enough. call_only_once = True for path, diff_file in patch_files.items(): line_numbers = diff_file.added_or_modified_line_numbers() _log.debug('Found %s new or modified lines in: %s' % (len(line_numbers), path)) if not line_numbers: match = re.search(r"\s*png$", path) if match and fs.exists(path): if call_only_once: self._text_file_reader.process_file(file_path=path, line_numbers=None) cwd = FileSystem().getcwd() detection = SCMDetector(fs, Executive()).detect_scm_system(cwd) if detection.display_name() == "git": call_only_once = False continue # Don't check files which contain only deleted lines # as they can never add style errors. However, mark them as # processed so that we count up number of such files. self._text_file_reader.delete_file(path) continue self._text_file_reader.process_file(file_path=path, line_numbers=line_numbers) self._text_file_reader.do_association_check(fs.getcwd())
def find_matching_definitions(self, diff): matching_definitions = set() patch_files = DiffParser(diff.splitlines()).files for path, diff_file in patch_files.items(): for definition in self.definitions: # If a definition has already matched, there is no need to process it. if definition in matching_definitions: continue # See if the definition matches within one file. for pattern in self.definitions[definition]: if not pattern.match(path, diff_file.lines): break else: matching_definitions.add(definition) return matching_definitions