private LocalPackageInfo FindCandidate(string name, NuGetVersionRange versionRange) { var packages = _repository.FindPackagesById(name); if (versionRange == null) { // TODO: Disallow null versions for nuget packages var packageInfo = packages.FirstOrDefault(); if (packageInfo != null) { return(packageInfo); } return(null); } LocalPackageInfo bestMatch = null; foreach (var packageInfo in packages) { if (versionRange.IsBetter( current: bestMatch?.Version, considering: packageInfo.Version)) { bestMatch = packageInfo; } } if (bestMatch == null) { return(null); } return(bestMatch); }
/// <summary> /// True if the given version falls into the floating range. /// </summary> public bool Satisfies(NuGet.Versioning.NuGetVersion version) { Guard.NotNull(version, nameof(version)); if (HasReleaseLabel) { if (NuGetVersionRange.MinVersion.IsPrerelease) { throw new NotSupportedException($"Versions with release labels not supported when using on-demand release labels, '{NuGetVersionRange.MinVersion}'"); } if (NuGetVersionRange.MinVersion == NuGetVersionRange.MaxVersion) { throw new NotSupportedException($"Versions with all numbers declares are not supported '{NuGetVersionRange.MinVersion}'"); } if (ReleaseLabel != null && version.IsPrerelease && !ReleaseLabel.Equals(version.ReleaseLabels.First(), StringComparison.OrdinalIgnoreCase)) { return(false); } return(GetVersionRangeWithLabel(version.IsPrerelease).Satisfies(version, VersionComparer.Pundit)); } NuGet.Versioning.VersionRange range; if (NuGetVersionRange.MaxVersion?.IsPrerelease == false && version.IsPrerelease) { range = NuGetVersionRange.ReplaceMaxVersion(NuGetVersionRange.MaxVersion.Append("-")); } else { range = NuGetVersionRange; } return(range.Satisfies(version, VersionComparer.VersionRelease)); }
private static void PopulateDependencies( string projectPath, IList <LibraryDependency> results, JObject settings, string propertyName, bool isGacOrFrameworkReference) { var dependencies = settings[propertyName] as JObject; if (dependencies != null) { foreach (var dependency in dependencies) { if (string.IsNullOrEmpty(dependency.Key)) { throw ProjectFormatException.Create( "Unable to resolve dependency ''.", dependency.Value, projectPath); } // Support // "dependencies" : { // "Name" : "1.0" // } var dependencyValue = dependency.Value; var dependencyTypeValue = LibraryDependencyType.Default; string dependencyVersionValue = null; JToken dependencyVersionToken = dependencyValue; if (dependencyValue.Type == JTokenType.String) { dependencyVersionValue = dependencyValue.Value <string>(); } else { if (dependencyValue.Type == JTokenType.Object) { dependencyVersionToken = dependencyValue["version"]; if (dependencyVersionToken != null && dependencyVersionToken.Type == JTokenType.String) { dependencyVersionValue = dependencyVersionToken.Value <string>(); } } IEnumerable <string> strings; if (TryGetStringEnumerable(dependencyValue["type"], out strings)) { dependencyTypeValue = LibraryDependencyType.Parse(strings); } } NuGetVersionRange dependencyVersionRange = null; if (!string.IsNullOrEmpty(dependencyVersionValue)) { try { dependencyVersionRange = NuGetVersionRange.Parse(dependencyVersionValue); } catch (Exception ex) { throw ProjectFormatException.Create( ex, dependencyVersionToken, projectPath); } } results.Add(new LibraryDependency { LibraryRange = new LibraryRange { Name = dependency.Key, VersionRange = dependencyVersionRange, IsGacOrFrameworkReference = isGacOrFrameworkReference, }, Type = dependencyTypeValue }); } } }