Пример #1
0
        private Package?GetSingleVersionAux(IPackageRange package)
        {
            // https://docs.microsoft.com/en-us/nuget/reference/package-versioning#version-ranges-and-wildcards
            string range = package.VersionRange;

            // Exact version match: "[x.y.z]"
            if (!range.Contains(",") && range.StartsWith("[") && range.EndsWith("]"))
            {
                int length = range.Length - 2;
                return(new Package(package.Id, range.Substring(1, length).Trim(), package.OriginProject));
            }

            // Minimum version, inclusive: "x.y.z"
            if (!range.Contains(","))
            {
                return(new Package(package.Id, range.Trim(), package.OriginProject));
            }

            // Inclusive minimal version: "[x.y.z, ..."
            if (range.StartsWith("["))
            {
                int length = range.IndexOf(",") - 1;
                return(new Package(package.Id, range.Substring(1, length).Trim(), package.OriginProject));
            }

            // Inclusive maximal version: "..., x.y.z]"
            if (range.StartsWith("]"))
            {
                int length = range.IndexOf(",") - 1;
                return(new Package(package.Id, range.Substring(1, length).Trim(), package.OriginProject));
            }

            // Exclusive range: "(x.y.z, a.b.c)", "(x.y.z,)", "(, x.y.z)"
            if (range.StartsWith("(") && range.EndsWith(")"))
            {
                // We cannot pick a specific version because we do not know which exist
                var versions = this.versionProvider.GetVersions(package.Id);
                var compare  = GetExlusiveVersionComparer(range);
                var version  = versions.Select(SemanticVersion.Parse).FirstOrDefault(compare);
                if (version == null)
                {
                    Log.Error("Could not find valid version for range: " + package.VersionRange);
                    return(null);
                }

                return(new Package(package.Id, version.ToString(), package.OriginProject));
            }

            Log.Error("Unhandled version format: " + package.VersionRange);
            return(null);
        }
Пример #2
0
 public InvalidDependencyChain(IPackageRange package, string message)
     : base(new AnalyzedPackage(package.Id, package.VersionRange, package.OriginProject, AnalysisState.Error, message), EmptyList)
 {
 }
Пример #3
0
 public Task <Package?> GetSingleVersion(IPackageRange package)
 {
     return(GetSingleVersion(package.Id, package.VersionRange, package.OriginProject));
 }
Пример #4
0
        public Task <Package?> GetSingleVersion(IPackageRange package)
        {
            Package?result = GetSingleVersionAux(package);

            return(Task.FromResult(result));
        }