static bool CheckVersion(UserDataMigrationNode node, string version) { var sourceVersion = node.SourceVersion; //exact match if (string.Equals(sourceVersion, version)) { return(true); } //open range of form "X+" if (sourceVersion[sourceVersion.Length - 1] == '+') { var idx = IndexOfVersion(null, version); var lower = IndexOfVersion(node, sourceVersion.Substring(0, sourceVersion.Length - 1)); return(lower >= 0 && idx >= lower); } //closed range of form "X-Y" if (sourceVersion.IndexOf('-') > 0) { var split = sourceVersion.Split('-'); if (split.Length != 2) { throw new Exception("Invalid migration sourceVersion range in " + node.Addin.Id); } var idx = IndexOfVersion(null, version); var lower = IndexOfVersion(node, split[0]); var upper = IndexOfVersion(node, split[1]); return(lower >= 0 && upper >= 0 && idx >= lower && idx >= upper); } return(false); }
static int IndexOfVersion(UserDataMigrationNode node, string version) { for (int i = 0; i < UserProfile.ProfileVersions.Length; i++) { if (string.Equals(UserProfile.ProfileVersions[i], version)) { return(i); } } if (node != null) { LoggingService.LogWarning("Migration in addin '{0}' refers to unknown version '{1}'", node.Addin.Id, version); } return(-1); }