Fix bug in external version verification causing Private=true to apply to all versions of that external dependency
This commit is contained in:
parent
8922f69532
commit
8b112a9548
|
|
@ -27,16 +27,20 @@ namespace RepoTasks
|
||||||
public override bool Execute()
|
public override bool Execute()
|
||||||
{
|
{
|
||||||
var packageLookup = new Dictionary<string, PackageInfo>(StringComparer.OrdinalIgnoreCase);
|
var packageLookup = new Dictionary<string, PackageInfo>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
var dependencyMap = new Dictionary<string, List<ExternalDependency>>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
var dependencyMap = new Dictionary<string, ExternalDependency>(StringComparer.OrdinalIgnoreCase);
|
|
||||||
foreach (var dep in ExternalDependencies)
|
foreach (var dep in ExternalDependencies)
|
||||||
{
|
{
|
||||||
if (!dependencyMap.TryGetValue(dep.ItemSpec, out var externalDep))
|
if (!dependencyMap.TryGetValue(dep.ItemSpec, out var list))
|
||||||
{
|
{
|
||||||
dependencyMap[dep.ItemSpec] = externalDep = new ExternalDependency();
|
dependencyMap[dep.ItemSpec] = list = new List<ExternalDependency>();
|
||||||
}
|
}
|
||||||
externalDep.IsPrivate = bool.TryParse(dep.GetMetadata("Private"), out var isPrivate) && isPrivate;
|
var externalDep = new ExternalDependency
|
||||||
externalDep.AllowedVersions.Add(dep.GetMetadata("Version"));
|
{
|
||||||
|
Version = dep.GetMetadata("Version"),
|
||||||
|
IsPrivate = bool.TryParse(dep.GetMetadata("Private"), out var isPrivate) && isPrivate,
|
||||||
|
};
|
||||||
|
list.Add(externalDep);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var file in PackageFiles)
|
foreach (var file in PackageFiles)
|
||||||
|
|
@ -74,13 +78,13 @@ namespace RepoTasks
|
||||||
|
|
||||||
private class ExternalDependency
|
private class ExternalDependency
|
||||||
{
|
{
|
||||||
public List<string> AllowedVersions { get; } = new List<string>();
|
public string Version { get; set; }
|
||||||
public bool IsPrivate { get; set; }
|
public bool IsPrivate { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Visit(
|
private void Visit(
|
||||||
IReadOnlyDictionary<string, PackageInfo> packageLookup,
|
IReadOnlyDictionary<string, PackageInfo> packageLookup,
|
||||||
IReadOnlyDictionary<string, ExternalDependency> dependencyMap,
|
IReadOnlyDictionary<string, List<ExternalDependency>> dependencyMap,
|
||||||
PackageInfo packageInfo)
|
PackageInfo packageInfo)
|
||||||
{
|
{
|
||||||
Log.LogMessage(MessageImportance.Low, $"Processing package {packageInfo.Id}");
|
Log.LogMessage(MessageImportance.Low, $"Processing package {packageInfo.Id}");
|
||||||
|
|
@ -92,17 +96,20 @@ namespace RepoTasks
|
||||||
{
|
{
|
||||||
PackageInfo dependencyPackageInfo;
|
PackageInfo dependencyPackageInfo;
|
||||||
var depVersion = dependency.VersionRange.MinVersion.ToString();
|
var depVersion = dependency.VersionRange.MinVersion.ToString();
|
||||||
if (dependencyMap.TryGetValue(dependency.Id, out var externalDepInfo))
|
if (dependencyMap.TryGetValue(dependency.Id, out var externalDependencies))
|
||||||
{
|
{
|
||||||
if (externalDepInfo.IsPrivate)
|
var matchedVersion = externalDependencies.FirstOrDefault(d => depVersion.Equals(d.Version));
|
||||||
|
|
||||||
|
if (matchedVersion == null)
|
||||||
|
{
|
||||||
|
var versions = string.Join(" or ", externalDependencies.Select(d => d.Version));
|
||||||
|
Log.LogError($"Package {packageInfo.Id} has an external dependency on the wrong version of {dependency.Id}. "
|
||||||
|
+ $"It uses {depVersion} but only {versions} is allowed.");
|
||||||
|
}
|
||||||
|
else if (matchedVersion.IsPrivate)
|
||||||
{
|
{
|
||||||
Log.LogError($"Package {packageInfo.Id} has an external dependency on {dependency.Id}/{depVersion} which is marked as Private=true.");
|
Log.LogError($"Package {packageInfo.Id} has an external dependency on {dependency.Id}/{depVersion} which is marked as Private=true.");
|
||||||
}
|
}
|
||||||
else if (!externalDepInfo.AllowedVersions.Any(a => depVersion.Equals(a)))
|
|
||||||
{
|
|
||||||
Log.LogError($"Package {packageInfo.Id} has an external dependency on the wrong version of {dependency.Id}. "
|
|
||||||
+ $"It uses {depVersion} but only {string.Join(" or ", externalDepInfo.AllowedVersions)} is allowed.");
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (!packageLookup.TryGetValue(dependency.Id, out dependencyPackageInfo))
|
else if (!packageLookup.TryGetValue(dependency.Id, out dependencyPackageInfo))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue