@@ -1032,9 +1032,12 @@ public HashSet<string> FindObsoleteVersions() {
1032
1032
/// </summary>
1033
1033
public class FileMetadataSet {
1034
1034
/// <summary>
1035
- /// Dictionary of FileMetadataVersions indexed by filename with
1035
+ /// Dictionary of FileMetadataByVersion indexed by filename with
1036
1036
/// metadata stripped.
1037
1037
/// </summary>
1038
+ /// <remarks>
1039
+ /// This shouldn't not be modified directly, use Add() and Clear() instead.
1040
+ /// </remarks>
1038
1041
private Dictionary < string , FileMetadataByVersion >
1039
1042
metadataByCanonicalFilename =
1040
1043
new Dictionary < string , FileMetadataByVersion > ( ) ;
@@ -1055,32 +1058,96 @@ public FileMetadataSet() { }
1055
1058
/// <summary>
1056
1059
/// Filter all files that were installed by the Unity Package Manager.
1057
1060
/// </summary>
1058
- /// <param name="metadata ">Metadata to filter.</param>
1061
+ /// <param name="metadataSet ">Metadata set to filter.</param>
1059
1062
/// <returns>New FileMetadata with Unity Package Manager files removed.</returns>
1060
- public static FileMetadataSet FilterOutUnityPackageManagerFiles ( FileMetadataSet metadata ) {
1063
+ public static FileMetadataSet FilterOutUnityPackageManagerFiles (
1064
+ FileMetadataSet metadataSet ) {
1061
1065
var filteredMetadata = new FileMetadataSet ( ) ;
1062
- var metadataByCanonicalFilename = filteredMetadata . metadataByCanonicalFilename ;
1063
- foreach ( var metadataFilename in metadata . metadataByCanonicalFilename ) {
1064
- var filename = metadataFilename . Key ;
1065
- if ( FileUtils . IsUnderDirectory ( filename , FileUtils . PACKAGES_FOLDER ) ) continue ;
1066
- metadataByCanonicalFilename [ filename ] = metadataFilename . Value ;
1066
+ foreach ( var metadataByVersion in metadataSet . Values ) {
1067
+ foreach ( var metadata in metadataByVersion . Values ) {
1068
+ if ( ! FileUtils . IsUnderDirectory ( metadata . filename ,
1069
+ FileUtils . PACKAGES_FOLDER ) ) {
1070
+ filteredMetadata . Add ( metadata ) ;
1071
+ }
1072
+ }
1067
1073
}
1068
1074
return filteredMetadata ;
1069
1075
}
1070
1076
1077
+ /// <summary>
1078
+ /// Empty the set.
1079
+ /// </summary>
1080
+ public void Clear ( ) {
1081
+ metadataByCanonicalFilename = new Dictionary < string , FileMetadataByVersion > ( ) ;
1082
+ }
1083
+
1071
1084
/// <summary>
1072
1085
/// Add file metadata to the set.
1073
1086
/// </summary>
1087
+ /// <param name="metadata">File metadata to add to the set.</param>
1074
1088
public void Add ( FileMetadata metadata ) {
1089
+ Add ( metadata . filenameCanonical , metadata ) ;
1090
+ }
1091
+
1092
+ /// <summary>
1093
+ /// Add file metadata to the set.
1094
+ /// </summary>
1095
+ /// <param name="filenameCanonical">File to associate the metadata with.</param>
1096
+ /// <param name="metadata">File metadata to add to the set.</param>
1097
+ public void Add ( string filenameCanonical , FileMetadata metadata ) {
1098
+ FindMetadataByVersion ( filenameCanonical , true ) . Add ( metadata ) ;
1099
+ }
1100
+
1101
+ /// <summary>
1102
+ /// Add a set of files to the specified set.
1103
+ /// </summary>
1104
+ /// <param name="filenameCanonical">File to associate the metadata with.</param>
1105
+ /// <param name="metadataByVersion">Set of files to add to the set.</param>
1106
+ public void Add ( string filenameCanonical , FileMetadataByVersion metadataByVersion ) {
1107
+ var existingMetadataByVersion = FindMetadataByVersion ( filenameCanonical , true ) ;
1108
+ foreach ( var metadata in metadataByVersion . Values ) {
1109
+ existingMetadataByVersion . Add ( metadata ) ;
1110
+ }
1111
+ }
1112
+
1113
+ /// <summary>
1114
+ /// Search for metadata for an existing file given a canonical filename
1115
+ /// and version.
1116
+ /// </summary>
1117
+ /// <param name="filenameCanonical">Name of the file set to search
1118
+ /// for.</param>
1119
+ /// <param name="version">Version number of the file in the set or 0 to find the
1120
+ /// most recent file.</param>
1121
+ /// <returns>Reference to the metadata if successful, null otherwise.</returns>
1122
+ public FileMetadata FindMetadata ( string filenameCanonical ,
1123
+ long version ) {
1124
+ var metadataByVersion = FindMetadataByVersion ( filenameCanonical , false ) ;
1125
+ FileMetadata metadata ;
1126
+ if ( metadataByVersion != null ) {
1127
+ metadata = version > 0 ? metadataByVersion [ version ] :
1128
+ metadataByVersion . MostRecentVersion ;
1129
+ if ( metadata != null ) return metadata ;
1130
+ }
1131
+ return null ;
1132
+ }
1133
+
1134
+ /// <summary>
1135
+ /// Get metadata by version for a given canonical filename.
1136
+ /// </summary>
1137
+ /// <param name="filenameCanonical">Name of the file set to search for.</param>
1138
+ /// <param name="addEntry">Whether to add an entry if the metadata isn't found.</param>
1139
+ /// <returns>Reference to the metadata by version if successful or addEntry is true,
1140
+ /// null otherwise.</returns>
1141
+ private FileMetadataByVersion FindMetadataByVersion ( string filenameCanonical ,
1142
+ bool addEntry ) {
1075
1143
FileMetadataByVersion metadataByVersion ;
1076
- string filenameCanonical = metadata . filenameCanonical ;
1077
1144
if ( ! metadataByCanonicalFilename . TryGetValue (
1078
1145
filenameCanonical , out metadataByVersion ) ) {
1079
- metadataByVersion =
1080
- new FileMetadataByVersion ( filenameCanonical ) ;
1146
+ if ( ! addEntry ) return null ;
1147
+ metadataByVersion = new FileMetadataByVersion ( filenameCanonical ) ;
1148
+ metadataByCanonicalFilename [ filenameCanonical ] = metadataByVersion ;
1081
1149
}
1082
- metadataByVersion . Add ( metadata ) ;
1083
- metadataByCanonicalFilename [ filenameCanonical ] = metadataByVersion ;
1150
+ return metadataByVersion ;
1084
1151
}
1085
1152
1086
1153
/// <summary>
@@ -1126,8 +1193,7 @@ public bool EnableMostRecentPlugins(bool forceUpdate) {
1126
1193
" - In Unity 4.x:\n " +
1127
1194
" - Select 'Assets > Reimport' from the menu.\n " ;
1128
1195
var warningLines = new List < string > ( ) ;
1129
- foreach ( var metadataByVersion in
1130
- metadataByCanonicalFilename . Values ) {
1196
+ foreach ( var metadataByVersion in Values ) {
1131
1197
bool hasRelevantVersions = false ;
1132
1198
var fileInfoLines = new List < string > ( ) ;
1133
1199
fileInfoLines . Add ( String . Format ( "Target Filename: {0}" ,
@@ -1171,8 +1237,7 @@ public bool EnableMostRecentPlugins(bool forceUpdate) {
1171
1237
return false ;
1172
1238
}
1173
1239
1174
- foreach ( var metadataByVersion in
1175
- metadataByCanonicalFilename . Values ) {
1240
+ foreach ( var metadataByVersion in Values ) {
1176
1241
modified |= metadataByVersion . EnableMostRecentPlugins ( ) ;
1177
1242
}
1178
1243
return modified ;
@@ -1216,33 +1281,11 @@ public static FileMetadataSet FindWithPendingUpdates(
1216
1281
}
1217
1282
}
1218
1283
if ( needsUpdate ) {
1219
- Log ( filenameAndMetadata . Key + " metadata will be checked" ,
1220
- verbose : true ) ;
1221
- outMetadataSet . metadataByCanonicalFilename [
1222
- filenameAndMetadata . Key ] = filenameAndMetadata . Value ;
1284
+ outMetadataSet . Add ( filenameAndMetadata . Key , filenameAndMetadata . Value ) ;
1223
1285
}
1224
1286
}
1225
1287
return outMetadataSet ;
1226
1288
}
1227
-
1228
- /// <summary>
1229
- /// Search for metadata for an existing file given a canonical filename
1230
- /// and version.
1231
- /// </summary>
1232
- /// <param name="filenameCanonical">Name of the file set to search
1233
- /// for.</param>
1234
- /// <param name="version">Version number of the file in the set.</param>
1235
- /// <returns>Reference to the metadata if successful, null otherwise.
1236
- /// </returns>
1237
- public FileMetadata FindMetadata ( string filenameCanonical ,
1238
- long version ) {
1239
- FileMetadataByVersion metadataByVersion ;
1240
- if ( ! metadataByCanonicalFilename . TryGetValue (
1241
- filenameCanonical , out metadataByVersion ) ) {
1242
- return null ;
1243
- }
1244
- return metadataByVersion [ version ] ;
1245
- }
1246
1289
}
1247
1290
1248
1291
/// <summary>
0 commit comments