@@ -251,11 +251,11 @@ class Diff(object):
251
251
252
252
__slots__ = ("a_blob" ,"b_blob" ,"a_mode" ,"b_mode" ,"a_rawpath" ,"b_rawpath" ,
253
253
"new_file" ,"deleted_file" ,"raw_rename_from" ,"raw_rename_to" ,
254
- "diff" ,"change_type" )
254
+ "diff" ,"change_type" , "score" )
255
255
256
256
def __init__ (self ,repo ,a_rawpath ,b_rawpath ,a_blob_id ,b_blob_id ,a_mode ,
257
257
b_mode ,new_file ,deleted_file ,raw_rename_from ,
258
- raw_rename_to ,diff ,change_type ):
258
+ raw_rename_to ,diff ,change_type , score ):
259
259
260
260
self .a_mode = a_mode
261
261
self .b_mode = b_mode
@@ -291,6 +291,7 @@ def __init__(self, repo, a_rawpath, b_rawpath, a_blob_id, b_blob_id, a_mode,
291
291
292
292
self .diff = diff
293
293
self .change_type = change_type
294
+ self .score = score
294
295
295
296
def __eq__ (self ,other ):
296
297
for name in self .__slots__ :
@@ -445,7 +446,7 @@ def _index_from_patch_format(cls, repo, proc):
445
446
new_file ,deleted_file ,
446
447
rename_from ,
447
448
rename_to ,
448
- None ,None ))
449
+ None ,None , None ))
449
450
450
451
previous_header = header
451
452
# end for each header we parse
@@ -470,7 +471,13 @@ def handle_diff_line(line):
470
471
return
471
472
472
473
meta ,_ ,path = line [1 :].partition ('\t ' )
473
- old_mode ,new_mode ,a_blob_id ,b_blob_id ,change_type = meta .split (None ,4 )
474
+ old_mode ,new_mode ,a_blob_id ,b_blob_id ,_change_type = meta .split (None ,4 )
475
+ # Change type can be R100
476
+ # R: status letter
477
+ # 100: score (in case of copy and rename)
478
+ change_type = _change_type [0 ]
479
+ score_str = '' .join (_change_type [1 :])
480
+ score = int (score_str )if score_str .isdigit ()else None
474
481
path = path .strip ()
475
482
a_path = path .encode (defenc )
476
483
b_path = path .encode (defenc )
@@ -487,15 +494,16 @@ def handle_diff_line(line):
487
494
elif change_type == 'A' :
488
495
a_blob_id = None
489
496
new_file = True
490
- elif change_type [ 0 ] == 'R' :# parses RXXX, where XXX is a confidence value
497
+ elif change_type == 'R' :
491
498
a_path ,b_path = path .split ('\t ' ,1 )
492
499
a_path = a_path .encode (defenc )
493
500
b_path = b_path .encode (defenc )
494
501
rename_from ,rename_to = a_path ,b_path
495
502
# END add/remove handling
496
503
497
504
diff = Diff (repo ,a_path ,b_path ,a_blob_id ,b_blob_id ,old_mode ,new_mode ,
498
- new_file ,deleted_file ,rename_from ,rename_to ,'' ,change_type )
505
+ new_file ,deleted_file ,rename_from ,rename_to ,'' ,
506
+ change_type ,score )
499
507
index .append (diff )
500
508
501
509
handle_process_output (proc ,handle_diff_line ,None ,finalize_process ,decode_streams = False )