@@ -310,21 +310,24 @@ def _index_from_patch_format(cls, repo, stream):
310
310
@classmethod
311
311
def _index_from_raw_format (cls , repo , stream ):
312
312
"""Create a new DiffIndex from the given stream which must be in raw format.
313
- :note:
314
- This format is inherently incapable of detecting renames, hence we only
315
- modify, delete and add files
316
313
:return: git.DiffIndex"""
317
314
# handles
318
315
# :100644 100644 6870991011cc8d9853a7a8a6f02061512c6a8190 37c5e30c879213e9ae83b21e9d11e55fc20c54b7 M .gitignore
316
+ # or
317
+ # :100644 100644 4aab7ea753e2867dd464f2a50dd266d426ddc8c8 4aab7ea753e2867dd464f2a50dd266d426ddc8c8 R100 src/bootstrap/package.json package.json
319
318
index = DiffIndex ()
320
319
for line in stream :
321
320
if not line .startswith (":" ):
322
321
continue
323
322
# END its not a valid diff line
324
323
old_mode , new_mode , a_blob_id , b_blob_id , change_type , path = line [1 :].split (None , 5 )
325
324
path = path .strip ()
326
- a_path = path
327
- b_path = path
325
+ if change_type [0 ] != 'R' :
326
+ a_path = b_path = path
327
+ rename_from = rename_to = None
328
+ else :
329
+ a_path , b_path = path .split ('\t ' )
330
+ rename_from , rename_to = a_path , b_path
328
331
deleted_file = False
329
332
new_file = False
330
333
@@ -339,7 +342,7 @@ def _index_from_raw_format(cls, repo, stream):
339
342
# END add/remove handling
340
343
341
344
diff = Diff (repo , a_path , b_path , a_blob_id , b_blob_id , old_mode , new_mode ,
342
- new_file , deleted_file , None , None , '' )
345
+ new_file , deleted_file , rename_from , rename_to , '' )
343
346
index .append (diff )
344
347
# END for each line
345
348
0 commit comments