private List <ToolManifestPackage> GetToolManifestPackageFromOneManifestFile( SerializableLocalToolsManifest deserializedManifest, FilePath path, DirectoryPath correspondingDirectory) { List <ToolManifestPackage> result = new List <ToolManifestPackage>(); var errors = new List <string>(); ValidateVersion(deserializedManifest, errors); if (!deserializedManifest.IsRoot.HasValue) { errors.Add(string.Format(LocalizableStrings.ManifestMissingIsRoot, path.Value)); } foreach (KeyValuePair <string, SerializableLocalToolSinglePackage> tools in (deserializedManifest.Tools ?? new Dictionary <string, SerializableLocalToolSinglePackage>())) { var packageLevelErrors = new List <string>(); var packageIdString = tools.Key; var packageId = new PackageId(packageIdString); string versionString = tools.Value.Version; NuGetVersion version = null; if (versionString is null) { packageLevelErrors.Add(LocalizableStrings.ToolMissingVersion); } else { if (!NuGetVersion.TryParse(versionString, out version)) { packageLevelErrors.Add(string.Format(LocalizableStrings.VersionIsInvalid, versionString)); } } if (tools.Value.Commands == null || (tools.Value.Commands != null && tools.Value.Commands.Length == 0)) { packageLevelErrors.Add(LocalizableStrings.FieldCommandsIsMissing); } if (packageLevelErrors.Any()) { var joinedWithIndentation = string.Join(Environment.NewLine, packageLevelErrors.Select(e => "\t\t" + e)); errors.Add(string.Format(LocalizableStrings.InPackage, packageId.ToString(), joinedWithIndentation)); } else { result.Add(new ToolManifestPackage( packageId, version, ToolCommandName.Convert(tools.Value.Commands), correspondingDirectory)); } } if (errors.Any()) { throw new ToolManifestException( string.Format(LocalizableStrings.InvalidManifestFilePrefix, path.Value, string.Join(Environment.NewLine, errors.Select(e => "\t" + e)))); } return(result); }
private List <ToolManifestPackage> GetToolManifestPackageFromOneManifestFile( SerializableLocalToolsManifest deserializedManifest, FilePath path) { List <ToolManifestPackage> result = new List <ToolManifestPackage>(); var errors = new List <string>(); if (deserializedManifest.version == 0) { errors.Add(string.Format(LocalizableStrings.ManifestVersion0, path.Value)); } if (deserializedManifest.version > SupportedVersion) { errors.Add( string.Format( LocalizableStrings.ManifestVersionHigherThanSupported, deserializedManifest.version, SupportedVersion, path.Value)); } foreach (KeyValuePair <string, SerializableLocalToolSinglePackage> tools in deserializedManifest.tools) { var packageLevelErrors = new List <string>(); var packageIdString = tools.Key; var packageId = new PackageId(packageIdString); string versionString = tools.Value.version; NuGetVersion version = null; if (versionString is null) { packageLevelErrors.Add(LocalizableStrings.ToolMissingVersion); } else { if (!NuGetVersion.TryParse(versionString, out version)) { packageLevelErrors.Add(string.Format(LocalizableStrings.VersionIsInvalid, versionString)); } } NuGetFramework targetFramework = null; var targetFrameworkString = tools.Value.targetFramework; if (targetFrameworkString != null) { targetFramework = NuGetFramework.Parse( targetFrameworkString); if (targetFramework.IsUnsupported) { packageLevelErrors.Add( string.Format(LocalizableStrings.TargetFrameworkIsUnsupported, targetFrameworkString)); } } if (tools.Value.commands == null || (tools.Value.commands != null && tools.Value.commands.Length == 0)) { packageLevelErrors.Add(LocalizableStrings.FieldCommandsIsMissing); } if (packageLevelErrors.Any()) { var joinedWithIndentation = string.Join(Environment.NewLine, packageLevelErrors.Select(e => "\t\t" + e)); errors.Add(string.Format(LocalizableStrings.InPackage, packageId.ToString(), joinedWithIndentation)); } else { result.Add(new ToolManifestPackage( packageId, version, ToolCommandName.Convert(tools.Value.commands))); } } if (errors.Any()) { throw new ToolManifestException( string.Format(LocalizableStrings.InvalidManifestFilePrefix, string.Join(Environment.NewLine, errors.Select(e => "\t" + e)))); } return(result); }
public IReadOnlyCollection <ToolManifestPackage> Find(FilePath?filePath = null) { var result = new List <ToolManifestPackage>(); IEnumerable <FilePath> allPossibleManifests = filePath != null ? new[] { filePath.Value } : EnumerateDefaultAllPossibleManifests(); foreach (FilePath possibleManifest in allPossibleManifests) { if (_fileSystem.File.Exists(possibleManifest.Value)) { SerializableLocalToolsManifest deserializedManifest = JsonConvert.DeserializeObject <SerializableLocalToolsManifest>( _fileSystem.File.ReadAllText(possibleManifest.Value), new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }); var errors = new List <string>(); if (!deserializedManifest.isRoot) { errors.Add("isRoot is false is not supported."); } if (deserializedManifest.version != 1) { errors.Add(string.Format("Tools manifest format version {0} is not supported.", deserializedManifest.version)); } foreach (var tools in deserializedManifest.tools) { var packageLevelErrors = new List <string>(); var packageIdString = tools.Key; var packageId = new PackageId(packageIdString); string versionString = tools.Value.version; NuGetVersion version = null; if (versionString is null) { packageLevelErrors.Add(LocalizableStrings.MissingVersion); } else { var versionParseResult = NuGetVersion.TryParse( versionString, out version); if (!versionParseResult) { packageLevelErrors.Add(string.Format(LocalizableStrings.VersionIsInvalid, versionString)); } } if (tools.Value.commands == null || (tools.Value.commands != null && tools.Value.commands.Length == 0)) { packageLevelErrors.Add(LocalizableStrings.FieldCommandsIsMissing); } if (packageLevelErrors.Any()) { var joined = string.Join(string.Empty, packageLevelErrors.Select(e => Environment.NewLine + " " + e)); errors.Add(string.Format(LocalizableStrings.InPackage, packageId.ToString()) + joined); } else { result.Add(new ToolManifestPackage( packageId, version, ToolCommandName.Convert(tools.Value.commands))); } } if (errors.Any()) { throw new ToolManifestException(LocalizableStrings.InvalidManifestFilePrefix + string.Join(string.Empty, errors.Select(e => Environment.NewLine + " " + e))); } return(result); } } throw new ToolManifestCannotFindException( string.Format(LocalizableStrings.CannotFindAnyManifestsFileSearched, string.Join(Environment.NewLine, allPossibleManifests.Select(f => f.Value)))); }