protected override bool Validate(NuspecDependency nuspecDependency, NuspecDependency nuConfigPackage, out string message) { var lowerEnd = nuspecDependency.MinVersion; var lowVersion = new Version(lowerEnd.Major, lowerEnd.Minor, lowerEnd.Bugfix); var actualVersion = new Version(nuConfigPackage.MinVersion.Major, nuConfigPackage.MinVersion.Minor, nuConfigPackage.MinVersion.Bugfix); bool greateOrEqualLowBound; if (lowerEnd.Inclusive) { greateOrEqualLowBound = actualVersion >= lowVersion; } else { greateOrEqualLowBound = actualVersion > lowVersion; } bool lowerOrEqualUpperBound; if (nuspecDependency.MaxVersion == null) { lowerOrEqualUpperBound = true; } else { var upperEnd = nuspecDependency.MaxVersion; var upVersion = new Version(upperEnd.Major, upperEnd.Minor, upperEnd.Bugfix); if (upperEnd.Inclusive) { lowerOrEqualUpperBound = actualVersion <= upVersion; } else { lowerOrEqualUpperBound = actualVersion < upVersion; } } if (greateOrEqualLowBound && lowerOrEqualUpperBound) { message = null; return(true); } message = $"Referenced package '{nuConfigPackage.Name}' (Version: {nuConfigPackage.Version} in packages config is not in range of Nuspec version '{nuspecDependency.Version}'"; return(false); }
protected override bool Validate(NuspecDependency nuspecDependency, NuspecDependency nuConfigPackage, out string message) { var specMin = nuspecDependency.MinVersion; var specMax = nuspecDependency.MaxVersion; if (specMax == null) { message = $"Cannot evaluate rule for '{nuspecDependency.Name}' if no max range is set"; return(false); } if (specMax.Major == specMin.Major && !(specMax.Minor > specMin.Minor)) { message = $"There package reference '{nuspecDependency.Name}' with version '{nuspecDependency.Version}' does not allow non-breaking changes"; return(false); } message = null; return(false); }
protected abstract bool Validate(NuspecDependency nuspecDependency, NuspecDependency nuConfigPackage, out string message);
public static NuspecDependency Convert(XmlNode depdencencyNode) { if (depdencencyNode == null) { throw new ArgumentNullException(nameof(depdencencyNode)); } if (depdencencyNode.Attributes == null) { return(null); } var id = depdencencyNode.Attributes["id"]; var versionString = depdencencyNode.Attributes["version"]; if (id == null || versionString == null) { return(null); } var versionStringValue = versionString.Value; var nuspecDependency = new NuspecDependency { Name = id.Value, Version = versionStringValue }; // Parse Version if (versionStringValue.Contains(",")) { if (!((versionStringValue.StartsWith("[") || versionStringValue.StartsWith("(")) && (versionStringValue.EndsWith("]") || versionStringValue.EndsWith(")")))) { throw new ArgumentException(); } var rangeParts = versionStringValue.Split(new[] { "," }, StringSplitOptions.None); // Left Part if (!string.IsNullOrWhiteSpace(rangeParts[0]) && rangeParts[0].Length > 1) { var leftVersion = CreateVersion(rangeParts[0].Substring(1)); leftVersion.Inclusive = rangeParts[0].StartsWith("["); nuspecDependency.MinVersion = leftVersion; } if (!string.IsNullOrWhiteSpace(rangeParts[1]) && rangeParts[1].Length > 1) { // Right Part var rightVersion = CreateVersion(rangeParts[1].Substring(0, rangeParts[1].Length - 1)); rightVersion.Inclusive = rangeParts[1].EndsWith("]"); nuspecDependency.MaxVersion = rightVersion; } } else { // [1.0] x == 1.0 Exact version match if (versionStringValue.StartsWith("[") && versionStringValue.EndsWith("]")) { var exactVersion = CreateVersion(versionStringValue.Substring(1, versionStringValue.Length - 2)); exactVersion.Inclusive = true; nuspecDependency.MinVersion = exactVersion; nuspecDependency.MaxVersion = exactVersion; } else { var minVersion = CreateVersion(versionStringValue); minVersion.Inclusive = true; nuspecDependency.MinVersion = minVersion; nuspecDependency.MaxVersion = null; } } return(nuspecDependency); }