Skip to content

Commit 99fe6bf

Browse files
author
Stewart Miles
committed
Improved encapsulation in FileMetadataSet.
Removed mutation of FileMetadataSet.metadataByCanonicalFilename outside of the Add(), Clear() methods so that it's possible to centrally change how data is stored in the class. Bug: 150886091 Change-Id: I08a68279250fdac9831792a94307f29ff30420dc
1 parent 569cab9 commit 99fe6bf

File tree

1 file changed

+83
-40
lines changed

1 file changed

+83
-40
lines changed

source/VersionHandlerImpl/src/VersionHandlerImpl.cs

Lines changed: 83 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,9 +1032,12 @@ public HashSet<string> FindObsoleteVersions() {
10321032
/// </summary>
10331033
public class FileMetadataSet {
10341034
/// <summary>
1035-
/// Dictionary of FileMetadataVersions indexed by filename with
1035+
/// Dictionary of FileMetadataByVersion indexed by filename with
10361036
/// metadata stripped.
10371037
/// </summary>
1038+
/// <remarks>
1039+
/// This shouldn't not be modified directly, use Add() and Clear() instead.
1040+
/// </remarks>
10381041
private Dictionary<string, FileMetadataByVersion>
10391042
metadataByCanonicalFilename =
10401043
new Dictionary<string, FileMetadataByVersion>();
@@ -1055,32 +1058,96 @@ public FileMetadataSet() { }
10551058
/// <summary>
10561059
/// Filter all files that were installed by the Unity Package Manager.
10571060
/// </summary>
1058-
/// <param name="metadata">Metadata to filter.</param>
1061+
/// <param name="metadataSet">Metadata set to filter.</param>
10591062
/// <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) {
10611065
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+
}
10671073
}
10681074
return filteredMetadata;
10691075
}
10701076

1077+
/// <summary>
1078+
/// Empty the set.
1079+
/// </summary>
1080+
public void Clear() {
1081+
metadataByCanonicalFilename = new Dictionary<string, FileMetadataByVersion>();
1082+
}
1083+
10711084
/// <summary>
10721085
/// Add file metadata to the set.
10731086
/// </summary>
1087+
/// <param name="metadata">File metadata to add to the set.</param>
10741088
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) {
10751143
FileMetadataByVersion metadataByVersion;
1076-
string filenameCanonical = metadata.filenameCanonical;
10771144
if (!metadataByCanonicalFilename.TryGetValue(
10781145
filenameCanonical, out metadataByVersion)) {
1079-
metadataByVersion =
1080-
new FileMetadataByVersion(filenameCanonical);
1146+
if (!addEntry) return null;
1147+
metadataByVersion = new FileMetadataByVersion(filenameCanonical);
1148+
metadataByCanonicalFilename[filenameCanonical] = metadataByVersion;
10811149
}
1082-
metadataByVersion.Add(metadata);
1083-
metadataByCanonicalFilename[filenameCanonical] = metadataByVersion;
1150+
return metadataByVersion;
10841151
}
10851152

10861153
/// <summary>
@@ -1126,8 +1193,7 @@ public bool EnableMostRecentPlugins(bool forceUpdate) {
11261193
" - In Unity 4.x:\n" +
11271194
" - Select 'Assets > Reimport' from the menu.\n";
11281195
var warningLines = new List<string>();
1129-
foreach (var metadataByVersion in
1130-
metadataByCanonicalFilename.Values) {
1196+
foreach (var metadataByVersion in Values) {
11311197
bool hasRelevantVersions = false;
11321198
var fileInfoLines = new List<string>();
11331199
fileInfoLines.Add(String.Format("Target Filename: {0}",
@@ -1171,8 +1237,7 @@ public bool EnableMostRecentPlugins(bool forceUpdate) {
11711237
return false;
11721238
}
11731239

1174-
foreach (var metadataByVersion in
1175-
metadataByCanonicalFilename.Values) {
1240+
foreach (var metadataByVersion in Values) {
11761241
modified |= metadataByVersion.EnableMostRecentPlugins();
11771242
}
11781243
return modified;
@@ -1216,33 +1281,11 @@ public static FileMetadataSet FindWithPendingUpdates(
12161281
}
12171282
}
12181283
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);
12231285
}
12241286
}
12251287
return outMetadataSet;
12261288
}
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-
}
12461289
}
12471290

12481291
/// <summary>

0 commit comments

Comments
 (0)