@@ -411,3 +411,73 @@ def test_diff_interface(self):
411
411
cp = c .parents [0 ]
412
412
diff_index = c .diff (cp , ["does/not/exist" ])
413
413
self .assertEqual (len (diff_index ), 0 )
414
+
415
+ @with_rw_directory
416
+ def test_rename_override (self , rw_dir ):
417
+ """Test disabling of diff rename detection"""
418
+
419
+ # create and commit file_a.txt
420
+ repo = Repo .init (rw_dir )
421
+ file_a = osp .join (rw_dir , "file_a.txt" )
422
+ with open (file_a , "w" , encoding = 'utf-8' ) as outfile :
423
+ outfile .write ("hello world\n " )
424
+ repo .git .add (Git .polish_url (file_a ))
425
+ repo .git .commit (message = "Added file_a.txt" )
426
+
427
+ # remove file_a.txt
428
+ repo .git .rm (Git .polish_url (file_a ))
429
+
430
+ # create and commit file_b.txt with similarity index of 52
431
+ file_b = osp .join (rw_dir , "file_b.txt" )
432
+ with open (file_b , "w" , encoding = 'utf-8' ) as outfile :
433
+ outfile .write ("hello world\n hello world" )
434
+ repo .git .add (Git .polish_url (file_b ))
435
+ repo .git .commit (message = "Removed file_a.txt. Added file_b.txt" )
436
+
437
+ commit_a = repo .commit ('HEAD' )
438
+ commit_b = repo .commit ('HEAD~1' )
439
+
440
+ # check default diff command with renamed files enabled
441
+ diffs = commit_b .diff (commit_a )
442
+ self .assertEqual (1 , len (diffs ))
443
+ diff = diffs [0 ]
444
+ self .assertEqual (True , diff .renamed_file )
445
+ self .assertEqual ('file_a.txt' , diff .rename_from )
446
+ self .assertEqual ('file_b.txt' , diff .rename_to )
447
+
448
+ # check diff with rename files disabled
449
+ diffs = commit_b .diff (commit_a , no_renames = True )
450
+ self .assertEqual (2 , len (diffs ))
451
+
452
+ # check fileA.txt deleted
453
+ diff = diffs [0 ]
454
+ self .assertEqual (True , diff .deleted_file )
455
+ self .assertEqual ('file_a.txt' , diff .a_path )
456
+
457
+ # check fileB.txt added
458
+ diff = diffs [1 ]
459
+ self .assertEqual (True , diff .new_file )
460
+ self .assertEqual ('file_b.txt' , diff .a_path )
461
+
462
+ # check diff with high similarity index
463
+ diffs = commit_b .diff (commit_a , split_single_char_options = False , M = '75%' )
464
+ self .assertEqual (2 , len (diffs ))
465
+
466
+ # check fileA.txt deleted
467
+ diff = diffs [0 ]
468
+ self .assertEqual (True , diff .deleted_file )
469
+ self .assertEqual ('file_a.txt' , diff .a_path )
470
+
471
+ # check fileB.txt added
472
+ diff = diffs [1 ]
473
+ self .assertEqual (True , diff .new_file )
474
+ self .assertEqual ('file_b.txt' , diff .a_path )
475
+
476
+ # check diff with low similarity index
477
+ diffs = commit_b .diff (commit_a , split_single_char_options = False , M = '40%' )
478
+ self .assertEqual (1 , len (diffs ))
479
+ diff = diffs [0 ]
480
+ self .assertEqual (True , diff .renamed_file )
481
+ self .assertEqual ('file_a.txt' , diff .rename_from )
482
+ self .assertEqual ('file_b.txt' , diff .rename_to )
483
+
0 commit comments