@@ -39,7 +39,7 @@ public void RetrievingANonExistentFileChangeReturnsNull()
39
39
40
40
var changes = repo . Diff . Compare < TreeChanges > ( tree , tree ) ;
41
41
42
- Assert . Null ( changes [ "batman" ] ) ;
42
+ Assert . Equal ( 0 , changes . Count ( c => c . Path == "batman" ) ) ;
43
43
}
44
44
}
45
45
@@ -62,7 +62,7 @@ public void CanCompareACommitTreeAgainstItsParent()
62
62
Assert . Equal ( 1 , changes . Count ( ) ) ;
63
63
Assert . Equal ( 1 , changes . Added . Count ( ) ) ;
64
64
65
- TreeEntryChanges treeEntryChanges = changes [ "1.txt" ] ;
65
+ TreeEntryChanges treeEntryChanges = changes . Single ( c => c . Path == "1.txt" ) ;
66
66
67
67
var patch = repo . Diff . Compare < Patch > ( parentCommitTree , commitTree ) ;
68
68
Assert . False ( patch [ "1.txt" ] . IsBinaryComparison ) ;
@@ -272,8 +272,7 @@ public void DetectsTheRenamingOfAModifiedFileByDefault()
272
272
var changes = repo . Diff . Compare < TreeChanges > ( rootCommitTree , commitTreeWithRenamedFile ) ;
273
273
274
274
Assert . Equal ( 1 , changes . Count ( ) ) ;
275
- Assert . Equal ( "super-file.txt" , changes [ "super-file.txt" ] . Path ) ;
276
- Assert . Equal ( "my-name-does-not-feel-right.txt" , changes [ "super-file.txt" ] . OldPath ) ;
275
+ Assert . Equal ( "my-name-does-not-feel-right.txt" , changes . Single ( c => c . Path == "super-file.txt" ) . OldPath ) ;
277
276
Assert . Equal ( 1 , changes . Renamed . Count ( ) ) ;
278
277
}
279
278
}
@@ -888,7 +887,7 @@ public void CanCompareTwoVersionsOfAFileWithADiffOfTwoHunks(int contextLines, in
888
887
Assert . Equal ( 1 , changes . Deleted . Count ( ) ) ;
889
888
Assert . Equal ( 1 , changes . Added . Count ( ) ) ;
890
889
891
- Assert . Equal ( Mode . Nonexistent , changes [ "my-name-does-not-feel-right.txt" ] . Mode ) ;
890
+ Assert . Equal ( Mode . Nonexistent , changes . Single ( c => c . Path == "my-name-does-not-feel-right.txt" ) . Mode ) ;
892
891
893
892
var patch = repo . Diff . Compare < Patch > ( rootCommitTree , mergedCommitTree , compareOptions : compareOptions ) ;
894
893
@@ -904,17 +903,16 @@ public void CanCompareTwoVersionsOfAFileWithADiffOfTwoHunks(int contextLines, in
904
903
}
905
904
}
906
905
907
- [ Fact ]
908
- public void CanHandleTwoTreeEntryChangesWithTheSamePath ( )
906
+ private void CanHandleTwoTreeEntryChangesWithTheSamePath ( SimilarityOptions similarity , Action < string , TreeChanges > verifier )
909
907
{
910
908
string repoPath = InitNewRepository ( ) ;
911
909
912
910
using ( var repo = new Repository ( repoPath ) )
913
911
{
914
- Blob mainContent = OdbHelper . CreateBlob ( repo , "awesome content\n " ) ;
912
+ Blob mainContent = OdbHelper . CreateBlob ( repo , "awesome content\n " + new string ( 'b' , 4096 ) ) ;
915
913
Blob linkContent = OdbHelper . CreateBlob ( repo , "../../objc/Nu.h" ) ;
916
914
917
- string path = string . Format ( "include{0}Nu{0}Nu.h " , Path . DirectorySeparatorChar ) ;
915
+ string path = Path . Combine ( "include" , "Nu ", "Nu.h" ) ;
918
916
919
917
var tdOld = new TreeDefinition ( )
920
918
. Add ( path , linkContent , Mode . SymbolicLink )
@@ -930,45 +928,61 @@ public void CanHandleTwoTreeEntryChangesWithTheSamePath()
930
928
var changes = repo . Diff . Compare < TreeChanges > ( treeOld , treeNew ,
931
929
compareOptions : new CompareOptions
932
930
{
933
- Similarity = SimilarityOptions . None ,
931
+ Similarity = similarity ,
934
932
} ) ;
935
933
936
- /*
937
- * $ git diff-tree -p 5c87b67 d5278d0
938
- * diff --git a/include/Nu/Nu.h b/include/Nu/Nu.h
939
- * deleted file mode 120000
940
- * index 19bf568..0000000
941
- * --- a/include/Nu/Nu.h
942
- * +++ /dev/null
943
- * @@ -1 +0,0 @@
944
- * -../../objc/Nu.h
945
- * \ No newline at end of file
946
- * diff --git a/include/Nu/Nu.h b/include/Nu/Nu.h
947
- * new file mode 100644
948
- * index 0000000..f9e6561
949
- * --- /dev/null
950
- * +++ b/include/Nu/Nu.h
951
- * @@ -0,0 +1 @@
952
- * +awesome content
953
- * diff --git a/objc/Nu.h b/objc/Nu.h
954
- * deleted file mode 100644
955
- * index f9e6561..0000000
956
- * --- a/objc/Nu.h
957
- * +++ /dev/null
958
- * @@ -1 +0,0 @@
959
- * -awesome content
960
- */
934
+ verifier ( path , changes ) ;
935
+ }
936
+ }
961
937
962
- Assert . Equal ( 1 , changes . Deleted . Count ( ) ) ;
963
- Assert . Equal ( 0 , changes . Modified . Count ( ) ) ;
964
- Assert . Equal ( 1 , changes . TypeChanged . Count ( ) ) ;
938
+ [ Fact ]
939
+ public void CanHandleTwoTreeEntryChangesWithTheSamePathUsingSimilarityNone ( )
940
+ {
941
+ // $ git diff-tree --name-status --no-renames -r 2ccccf8 e829333
942
+ // T include/Nu/Nu.h
943
+ // D objc/Nu.h
965
944
966
- TreeEntryChanges change = changes [ path ] ;
967
- Assert . Equal ( Mode . SymbolicLink , change . OldMode ) ;
968
- Assert . Equal ( Mode . NonExecutableFile , change . Mode ) ;
969
- Assert . Equal ( ChangeKind . TypeChanged , change . Status ) ;
970
- Assert . Equal ( path , change . Path ) ;
971
- }
945
+ CanHandleTwoTreeEntryChangesWithTheSamePath ( SimilarityOptions . None ,
946
+ ( path , changes ) =>
947
+ {
948
+ Assert . Equal ( 2 , changes . Count ( ) ) ;
949
+ Assert . Equal ( 1 , changes . Deleted . Count ( ) ) ;
950
+ Assert . Equal ( 1 , changes . TypeChanged . Count ( ) ) ;
951
+
952
+ TreeEntryChanges change = changes . Single ( c => c . Path == path ) ;
953
+ Assert . Equal ( Mode . SymbolicLink , change . OldMode ) ;
954
+ Assert . Equal ( Mode . NonExecutableFile , change . Mode ) ;
955
+ Assert . Equal ( ChangeKind . TypeChanged , change . Status ) ;
956
+ Assert . Equal ( path , change . Path ) ;
957
+ } ) ;
958
+ }
959
+
960
+ [ Fact ]
961
+ public void CanHandleTwoTreeEntryChangesWithTheSamePathUsingSimilarityDefault ( )
962
+ {
963
+ // $ git diff-tree --name-status --find-renames -r 2ccccf8 e829333
964
+ // T include/Nu/Nu.h
965
+ // D objc/Nu.h
966
+
967
+ CanHandleTwoTreeEntryChangesWithTheSamePath ( SimilarityOptions . Default ,
968
+ ( path , changes ) =>
969
+ {
970
+ Assert . Equal ( 2 , changes . Count ( ) ) ;
971
+ Assert . Equal ( 1 , changes . Deleted . Count ( ) ) ;
972
+ Assert . Equal ( 1 , changes . Renamed . Count ( ) ) ;
973
+
974
+ TreeEntryChanges renamed = changes . Renamed . Single ( ) ;
975
+ Assert . Equal ( Mode . NonExecutableFile , renamed . OldMode ) ;
976
+ Assert . Equal ( Mode . NonExecutableFile , renamed . Mode ) ;
977
+ Assert . Equal ( ChangeKind . Renamed , renamed . Status ) ;
978
+ Assert . Equal ( path , renamed . Path ) ;
979
+
980
+ TreeEntryChanges deleted = changes . Deleted . Single ( ) ;
981
+ Assert . Equal ( Mode . SymbolicLink , deleted . OldMode ) ;
982
+ Assert . Equal ( Mode . Nonexistent , deleted . Mode ) ;
983
+ Assert . Equal ( ChangeKind . Deleted , deleted . Status ) ;
984
+ Assert . Equal ( path , deleted . Path ) ;
985
+ } ) ;
972
986
}
973
987
974
988
[ Fact ]
@@ -1104,8 +1118,8 @@ public void RetrievingDiffChangesMustAlwaysBeCaseSensitive()
1104
1118
{
1105
1119
var changes = repo . Diff . Compare < TreeChanges > ( repo . Lookup < Tree > ( treeOldOid ) , repo . Lookup < Tree > ( treeNewOid ) ) ;
1106
1120
1107
- Assert . Equal ( ChangeKind . Modified , changes [ "a.txt" ] . Status ) ;
1108
- Assert . Equal ( ChangeKind . Modified , changes [ "A.TXT" ] . Status ) ;
1121
+ Assert . Equal ( ChangeKind . Modified , changes . Single ( c => c . Path == "a.txt" ) . Status ) ;
1122
+ Assert . Equal ( ChangeKind . Modified , changes . Single ( c => c . Path == "A.TXT" ) . Status ) ;
1109
1123
}
1110
1124
}
1111
1125
0 commit comments