@@ -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
@@ -471,6 +472,11 @@ def handle_diff_line(line):
471
472
472
473
meta , _ , path = line [1 :].partition ('\t ' )
473
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 = '' .join (change_type [1 :]) or None
474
480
path = path .strip ()
475
481
a_path = path .encode (defenc )
476
482
b_path = path .encode (defenc )
@@ -487,15 +493,16 @@ def handle_diff_line(line):
487
493
elif change_type == 'A' :
488
494
a_blob_id = None
489
495
new_file = True
490
- elif change_type [ 0 ] == 'R' : # parses RXXX, where XXX is a confidence value
496
+ elif change_type == 'R' :
491
497
a_path , b_path = path .split ('\t ' , 1 )
492
498
a_path = a_path .encode (defenc )
493
499
b_path = b_path .encode (defenc )
494
500
rename_from , rename_to = a_path , b_path
495
501
# END add/remove handling
496
502
497
503
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 )
504
+ new_file , deleted_file , rename_from , rename_to , '' ,
505
+ change_type , score )
499
506
index .append (diff )
500
507
501
508
handle_process_output (proc , handle_diff_line , None , finalize_process , decode_streams = False )
0 commit comments