summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurélien Matouillot <a.matouillot@gmail.com>2018-02-27 08:15:32 +0100
committerSebastian Thiel <byronimo@gmail.com>2018-05-19 09:36:38 +0200
commitc8fd91020739a0d57f1df562a57bf3e50c04c05b (patch)
tree622f8ddd01ade2362231917d2a5a370c28cff977
parent7be3486dc7f91069226919fea146ca1fec905657 (diff)
downloadgitpython-c8fd91020739a0d57f1df562a57bf3e50c04c05b.tar.gz
Get correcly rename change_type.
Also store the rename score
-rw-r--r--git/diff.py20
-rw-r--r--git/test/test_diff.py2
2 files changed, 16 insertions, 6 deletions
diff --git a/git/diff.py b/git/diff.py
index d7221ac7..9a3f6b1f 100644
--- a/git/diff.py
+++ b/git/diff.py
@@ -251,11 +251,11 @@ class Diff(object):
__slots__ = ("a_blob", "b_blob", "a_mode", "b_mode", "a_rawpath", "b_rawpath",
"new_file", "deleted_file", "raw_rename_from", "raw_rename_to",
- "diff", "change_type")
+ "diff", "change_type", "score")
def __init__(self, repo, a_rawpath, b_rawpath, a_blob_id, b_blob_id, a_mode,
b_mode, new_file, deleted_file, raw_rename_from,
- raw_rename_to, diff, change_type):
+ raw_rename_to, diff, change_type, score):
self.a_mode = a_mode
self.b_mode = b_mode
@@ -291,6 +291,7 @@ class Diff(object):
self.diff = diff
self.change_type = change_type
+ self.score = score
def __eq__(self, other):
for name in self.__slots__:
@@ -445,7 +446,7 @@ class Diff(object):
new_file, deleted_file,
rename_from,
rename_to,
- None, None))
+ None, None, None))
previous_header = header
# end for each header we parse
@@ -470,7 +471,13 @@ class Diff(object):
return
meta, _, path = line[1:].partition('\t')
- old_mode, new_mode, a_blob_id, b_blob_id, change_type = meta.split(None, 4)
+ old_mode, new_mode, a_blob_id, b_blob_id, _change_type = meta.split(None, 4)
+ # Change type can be R100
+ # R: status letter
+ # 100: score (in case of copy and rename)
+ change_type = _change_type[0]
+ score_str = ''.join(_change_type[1:])
+ score = int(score_str) if score_str.isdigit() else None
path = path.strip()
a_path = path.encode(defenc)
b_path = path.encode(defenc)
@@ -487,7 +494,7 @@ class Diff(object):
elif change_type == 'A':
a_blob_id = None
new_file = True
- elif change_type[0] == 'R': # parses RXXX, where XXX is a confidence value
+ elif change_type == 'R':
a_path, b_path = path.split('\t', 1)
a_path = a_path.encode(defenc)
b_path = b_path.encode(defenc)
@@ -495,7 +502,8 @@ class Diff(object):
# END add/remove handling
diff = Diff(repo, a_path, b_path, a_blob_id, b_blob_id, old_mode, new_mode,
- new_file, deleted_file, rename_from, rename_to, '', change_type)
+ new_file, deleted_file, rename_from, rename_to, '',
+ change_type, score)
index.append(diff)
handle_process_output(proc, handle_diff_line, None, finalize_process, decode_streams=False)
diff --git a/git/test/test_diff.py b/git/test/test_diff.py
index d21dde62..ced313af 100644
--- a/git/test/test_diff.py
+++ b/git/test/test_diff.py
@@ -108,6 +108,8 @@ class TestDiff(TestBase):
self.assertIsNotNone(diff.renamed)
self.assertEqual(diff.rename_from, 'this')
self.assertEqual(diff.rename_to, 'that')
+ self.assertEqual(diff.change_type, 'R')
+ self.assertEqual(diff.score, 100)
self.assertEqual(len(list(diffs.iter_change_type('R'))), 1)
def test_diff_of_modified_files_not_added_to_the_index(self):