Compare commits
	
		
			No commits in common. "8033e648ef2ae242ed897536431c4cfd41ba7bb7" and "6e5c3d7f07ad651202328aa41682938e01319bfd" have entirely different histories.
		
	
	
		
			8033e648ef
			...
			6e5c3d7f07
		
	
		
| @ -33,26 +33,18 @@ class LineShiftChecker: | ||||
|         return file_list | ||||
| 
 | ||||
|     def __get_shifted_lines_in_file(self, file_info) -> 'Dict[str, str | None]': | ||||
|         process_output = subprocess_readlines(['git', 'diff', | ||||
|         lines_in_source_file = self.__count_lines_in_source_file(file_info['src']) | ||||
|         process_output = subprocess_readlines(['git', 'diff', f'-U{lines_in_source_file}', | ||||
|                                                self.revision_since, self.revision_until, '--', | ||||
|                                                file_info['src'], file_info['dst']]) | ||||
| 
 | ||||
|         shifted_lines = {} | ||||
|         src_line_index = 1 | ||||
|         dst_line_index = 1 | ||||
|         diff_started = False | ||||
|         shifted_lines = {} | ||||
|         for line in process_output: | ||||
|             matches = re.search(LineShiftChecker.DIFF_BLOCK_REGEX, line) | ||||
|             if matches: | ||||
|                 diff_block_src_start = int(matches.group(1)) | ||||
|                 diff_block_dst_start = int(matches.group(3)) | ||||
| 
 | ||||
|                 # fill shifted lines between 2 diff blocks | ||||
|                 for i in range(0, diff_block_src_start - src_line_index): | ||||
|                     shifted_lines[f'{file_info["src"]}:{src_line_index+i}'] = f'{file_info["dst"]}:{dst_line_index+i}' | ||||
| 
 | ||||
|                 src_line_index = diff_block_src_start | ||||
|                 dst_line_index = diff_block_dst_start | ||||
|                 old_start = int(matches.group(1)) | ||||
|                 new_start = int(matches.group(3)) | ||||
|                 diff_started = True | ||||
|                 continue | ||||
| 
 | ||||
| @ -60,19 +52,20 @@ class LineShiftChecker: | ||||
|                 continue | ||||
| 
 | ||||
|             if line.startswith(' '): | ||||
|                 shifted_lines[f'{file_info["src"]}:{src_line_index}'] = f'{file_info["dst"]}:{dst_line_index}' | ||||
|                 src_line_index += 1 | ||||
|                 dst_line_index += 1 | ||||
|                 shifted_lines[f'{file_info["src"]}:{old_start}'] = f'{file_info["dst"]}:{new_start}' | ||||
|                 old_start += 1 | ||||
|                 new_start += 1 | ||||
|             elif line.startswith('+'): | ||||
|                 dst_line_index += 1 | ||||
|                 new_start += 1 | ||||
|             elif line.startswith('-'): | ||||
|                 shifted_lines[f'{file_info["src"]}:{src_line_index}'] = None | ||||
|                 src_line_index += 1 | ||||
|                 shifted_lines[f'{file_info["src"]}:{old_start}'] = None | ||||
|                 old_start += 1 | ||||
| 
 | ||||
|         # fill shifted lines until end of file | ||||
|         lines_in_source_file = self.__count_lines_in_source_file(file_info['src']) | ||||
|         for i in range(0, lines_in_source_file - src_line_index + 1): | ||||
|             shifted_lines[f'{file_info["src"]}:{src_line_index+i}'] = f'{file_info["dst"]}:{dst_line_index+i}' | ||||
|         if not diff_started: | ||||
|             # it was a pure rename, so no diff blocks were returned, | ||||
|             # we just put the lines into the dict | ||||
|             shifted_lines = {f'{file_info["src"]}:{i}': f'{file_info["dst"]}:{i}' | ||||
|                              for i in range(0, lines_in_source_file)} | ||||
| 
 | ||||
|         assert lines_in_source_file == len(shifted_lines) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user