@@ -183,7 +183,9 @@ def iter_change_type(self, change_type):
183183 raise ValueError ("Invalid change type: %s" % change_type )
184184
185185 for diff in self :
186- if change_type == "A" and diff .new_file :
186+ if diff .change_type == change_type :
187+ yield diff
188+ elif change_type == "A" and diff .new_file :
187189 yield diff
188190 elif change_type == "D" and diff .deleted_file :
189191 yield diff
@@ -247,11 +249,12 @@ class Diff(object):
247249 NULL_BIN_SHA = b"\0 " * 20
248250
249251 __slots__ = ("a_blob" , "b_blob" , "a_mode" , "b_mode" , "a_rawpath" , "b_rawpath" ,
250- "new_file" , "deleted_file" , "raw_rename_from" , "raw_rename_to" , "diff" )
252+ "new_file" , "deleted_file" , "raw_rename_from" , "raw_rename_to" ,
253+ "diff" , "change_type" )
251254
252255 def __init__ (self , repo , a_rawpath , b_rawpath , a_blob_id , b_blob_id , a_mode ,
253256 b_mode , new_file , deleted_file , raw_rename_from ,
254- raw_rename_to , diff ):
257+ raw_rename_to , diff , change_type ):
255258
256259 self .a_mode = a_mode
257260 self .b_mode = b_mode
@@ -286,6 +289,7 @@ def __init__(self, repo, a_rawpath, b_rawpath, a_blob_id, b_blob_id, a_mode,
286289 self .raw_rename_to = raw_rename_to or None
287290
288291 self .diff = diff
292+ self .change_type = change_type
289293
290294 def __eq__ (self , other ):
291295 for name in self .__slots__ :
@@ -435,7 +439,7 @@ def _index_from_patch_format(cls, repo, stream):
435439 new_file , deleted_file ,
436440 rename_from ,
437441 rename_to ,
438- None ))
442+ None , None ))
439443
440444 previous_header = header
441445 # end for each header we parse
@@ -483,7 +487,7 @@ def _index_from_raw_format(cls, repo, stream):
483487 # END add/remove handling
484488
485489 diff = Diff (repo , a_path , b_path , a_blob_id , b_blob_id , old_mode , new_mode ,
486- new_file , deleted_file , rename_from , rename_to , '' )
490+ new_file , deleted_file , rename_from , rename_to , '' , change_type )
487491 index .append (diff )
488492 # END for each line
489493
0 commit comments