do not diff submodules
This commit is contained in:
parent
82aa0f8b01
commit
e37c851af1
@ -13,3 +13,36 @@ def subprocess_readlines(cmd, cwd=None) -> Iterator[str]:
|
|||||||
|
|
||||||
if process.returncode != 0:
|
if process.returncode != 0:
|
||||||
raise subprocess.CalledProcessError(process.returncode, cmd)
|
raise subprocess.CalledProcessError(process.returncode, cmd)
|
||||||
|
|
||||||
|
|
||||||
|
def get_changed_files(since, until, diff_filter=None, cwd=None):
|
||||||
|
command = ['git', 'diff-tree', '-r']
|
||||||
|
if diff_filter:
|
||||||
|
command.extend([f'--diff-filter={diff_filter}'])
|
||||||
|
command.extend([since, until])
|
||||||
|
|
||||||
|
raw_diff = subprocess_readlines(command, cwd=cwd)
|
||||||
|
return [parse_raw_file_info(raw_diff_entry)
|
||||||
|
for raw_diff_entry in raw_diff]
|
||||||
|
|
||||||
|
|
||||||
|
def parse_raw_file_info(raw_diff_entry):
|
||||||
|
diff_entry = raw_diff_entry.lstrip(':').split()
|
||||||
|
|
||||||
|
mode_src = diff_entry[0]
|
||||||
|
mode_dst = diff_entry[1]
|
||||||
|
sha1_src = diff_entry[2]
|
||||||
|
sha1_dst = diff_entry[3]
|
||||||
|
status = diff_entry[4]
|
||||||
|
src = diff_entry[5]
|
||||||
|
dst = diff_entry[6] if len(diff_entry) > 6 else src
|
||||||
|
|
||||||
|
return {
|
||||||
|
'mode_src': mode_src,
|
||||||
|
'mode_dst': mode_dst,
|
||||||
|
'sha1_src': sha1_src,
|
||||||
|
'sha1_dst': sha1_dst,
|
||||||
|
'status': status,
|
||||||
|
'src': src,
|
||||||
|
'dst': dst
|
||||||
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import re
|
import re
|
||||||
from typing import List, Dict, Tuple, Sized, Iterable, Iterator
|
from typing import List, Dict, Tuple, Sized, Iterable, Iterator
|
||||||
from .helper import subprocess_readlines
|
from .helper import subprocess_readlines, get_changed_files
|
||||||
|
|
||||||
|
|
||||||
class ShiftedLines(Sized, Iterable):
|
class ShiftedLines(Sized, Iterable):
|
||||||
@ -28,6 +28,7 @@ class ShiftedLines(Sized, Iterable):
|
|||||||
|
|
||||||
|
|
||||||
class LineShiftChecker:
|
class LineShiftChecker:
|
||||||
|
SUBMODULE_MODE = '160000'
|
||||||
DIFF_BLOCK_REGEX = r'@@ -(\d+),(\d+) \+(\d+),(\d+) @@'
|
DIFF_BLOCK_REGEX = r'@@ -(\d+),(\d+) \+(\d+),(\d+) @@'
|
||||||
|
|
||||||
def __init__(self, revision_since: str, revision_until: str) -> None:
|
def __init__(self, revision_since: str, revision_until: str) -> None:
|
||||||
@ -39,18 +40,8 @@ class LineShiftChecker:
|
|||||||
for file_info in self.__get_changed_files()}
|
for file_info in self.__get_changed_files()}
|
||||||
|
|
||||||
def __get_changed_files(self) -> List[Dict]:
|
def __get_changed_files(self) -> List[Dict]:
|
||||||
process_output = subprocess_readlines(['git', 'diff', '--name-status', '--diff-filter=MR',
|
return [file_info for file_info in get_changed_files(self.revision_since, self.revision_until, diff_filter='MR')
|
||||||
self.revision_since, self.revision_until])
|
if file_info['mode_src'] != LineShiftChecker.SUBMODULE_MODE]
|
||||||
|
|
||||||
file_list = []
|
|
||||||
for line in process_output:
|
|
||||||
raw_file_info = line.split()
|
|
||||||
file_list.append({
|
|
||||||
'src': raw_file_info[1],
|
|
||||||
'dst': raw_file_info[2] if len(raw_file_info) > 2 else raw_file_info[1],
|
|
||||||
})
|
|
||||||
|
|
||||||
return file_list
|
|
||||||
|
|
||||||
def __get_shifted_lines_in_file(self, file_info: Dict[str, str]) -> ShiftedLines:
|
def __get_shifted_lines_in_file(self, file_info: Dict[str, str]) -> ShiftedLines:
|
||||||
process_output = subprocess_readlines(['git', 'diff',
|
process_output = subprocess_readlines(['git', 'diff',
|
||||||
|
Loading…
Reference in New Issue
Block a user