示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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))));
        }