Adding ranges to the source mappings so that we can specify the origin should match this range and migrate to that version. We use this to handle LTS/FTS migration and will use that for the LTS uplift.

This commit is contained in:
Livar Cunha 2017-01-11 19:30:05 -08:00
parent 4319668111
commit 89fba856e8
4 changed files with 227 additions and 59 deletions

View file

@ -6,6 +6,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
internal class ConstantPackageVersions
{
public const string AspNetToolsVersion = "1.0.0-msbuild3-final";
public const string AspNet110ToolsVersion = "1.1.0-msbuild3-final";
public const string TestSdkPackageVersion = "15.0.0-preview-20170106-08";
public const string XUnitPackageVersion = "2.2.0-beta4-build3444";
public const string XUnitRunnerPackageVersion = "2.2.0-beta4-build1194";

View file

@ -26,55 +26,215 @@ namespace Microsoft.DotNet.ProjectJsonMigration
public const string DotnetTestXunit = "dotnet-test-xunit";
public const string DotnetTestMSTest = "dotnet-test-mstest";
public static readonly IDictionary<string, PackageDependencyInfo> ProjectDependencyPackages =
new Dictionary<string, PackageDependencyInfo> {
{"Microsoft.EntityFrameworkCore.Tools", new PackageDependencyInfo {
public static readonly IDictionary<PackageDependencyInfo, PackageDependencyInfo> ProjectDependencyPackages =
new Dictionary<PackageDependencyInfo, PackageDependencyInfo> {
{
new PackageDependencyInfo {
Name = "Microsoft.EntityFrameworkCore.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.AspNetCore.Razor.Tools", null },
{ "Microsoft.AspNetCore.Razor.Design", null },
{ "Microsoft.VisualStudio.Web.CodeGenerators.Mvc", new PackageDependencyInfo {
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo {
Name = "Microsoft.EntityFrameworkCore.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion }
},
{
new PackageDependencyInfo
{
Name = "Microsoft.AspNetCore.Razor.Tools",
Version = "[1.0.0-*,)"
},
null
},
{
new PackageDependencyInfo
{
Name = "Microsoft.AspNetCore.Razor.Design",
Version = "[1.0.0-*,)"
},
null
},
// I hate to do this, but ordering here matters. The higher version needs to come first, otherwise
// the lower version mapping will match to it.
{
new PackageDependencyInfo
{
Name = "Microsoft.VisualStudio.Web.CodeGenerators.Mvc",
Version = "[1.1.0-*,)"
},
new PackageDependencyInfo
{
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Design",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.VisualStudio.Web.CodeGeneration.Tools", null},
{ TestSdkPackageName, new PackageDependencyInfo {
Version = ConstantPackageVersions.AspNet110ToolsVersion
}
},
{
new PackageDependencyInfo
{
Name = "Microsoft.VisualStudio.Web.CodeGenerators.Mvc",
Version = "[1.0.0-*,1.1.0)"
},
new PackageDependencyInfo
{
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Design",
Version = ConstantPackageVersions.AspNetToolsVersion
}
},
{
new PackageDependencyInfo
{
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Tools",
Version = "[1.0.0-*,)"
},
null
},
{
new PackageDependencyInfo
{
Name = TestSdkPackageName,
Version = ConstantPackageVersions.TestSdkPackageVersion } },
{ XUnitPackageName, new PackageDependencyInfo {
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo
{
Name = TestSdkPackageName,
Version = ConstantPackageVersions.TestSdkPackageVersion
}
},
{
new PackageDependencyInfo
{
Name = XUnitPackageName,
Version = ConstantPackageVersions.XUnitPackageVersion } },
{ XUnitRunnerPackageName, new PackageDependencyInfo {
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo
{
Name = XUnitPackageName,
Version = ConstantPackageVersions.XUnitPackageVersion
}
},
{
new PackageDependencyInfo
{
Name = XUnitRunnerPackageName,
Version = ConstantPackageVersions.XUnitRunnerPackageVersion } },
{ MstestTestAdapterName, new PackageDependencyInfo {
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo {
Name = XUnitRunnerPackageName,
Version = ConstantPackageVersions.XUnitRunnerPackageVersion
}
},
{
new PackageDependencyInfo
{
Name = MstestTestAdapterName,
Version = ConstantPackageVersions.MstestTestAdapterVersion } },
{ MstestTestFrameworkName, new PackageDependencyInfo {
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo
{
Name = MstestTestAdapterName,
Version = ConstantPackageVersions.MstestTestAdapterVersion
}
},
{
new PackageDependencyInfo
{
Name = MstestTestFrameworkName,
Version = ConstantPackageVersions.MstestTestFrameworkVersion } },
{ DotnetTestXunit, null },
{ DotnetTestMSTest, null },
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo {
Name = MstestTestFrameworkName,
Version = ConstantPackageVersions.MstestTestFrameworkVersion
}
},
{
new PackageDependencyInfo
{
Name = DotnetTestXunit,
Version = "[1.0.0-*,)"
},
null
},
{
new PackageDependencyInfo
{
Name = DotnetTestMSTest,
Version = "[1.0.0-*,)"
},
null
},
};
public static readonly IDictionary<string, PackageDependencyInfo> ProjectToolPackages =
new Dictionary<string, PackageDependencyInfo> {
{"Microsoft.EntityFrameworkCore.Tools", new PackageDependencyInfo {
public static readonly IDictionary<PackageDependencyInfo, PackageDependencyInfo> ProjectToolPackages =
new Dictionary<PackageDependencyInfo, PackageDependencyInfo> {
{
new PackageDependencyInfo
{
Name = "Microsoft.EntityFrameworkCore.Tools",
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo {
Name = "Microsoft.EntityFrameworkCore.Tools.DotNet",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.AspNetCore.Razor.Tools", null },
{ "Microsoft.VisualStudio.Web.CodeGeneration.Tools", new PackageDependencyInfo {
Version = ConstantPackageVersions.AspNetToolsVersion
}
},
{
new PackageDependencyInfo
{
Name = "Microsoft.AspNetCore.Razor.Tools",
Version = "[1.0.0-*,)"
},
null
},
{
new PackageDependencyInfo
{
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.DotNet.Watcher.Tools", new PackageDependencyInfo {
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo {
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion
}
},
{
new PackageDependencyInfo
{
Name = "Microsoft.DotNet.Watcher.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.Extensions.SecretManager.Tools", new PackageDependencyInfo {
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo {
Name = "Microsoft.DotNet.Watcher.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion
}
},
{
new PackageDependencyInfo
{
Name = "Microsoft.Extensions.SecretManager.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.AspNetCore.Server.IISIntegration.Tools", null},
{ "BundlerMinifier.Core", new PackageDependencyInfo {
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo {
Name = "Microsoft.Extensions.SecretManager.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion
}
},
{
new PackageDependencyInfo
{
Name = "Microsoft.AspNetCore.Server.IISIntegration.Tools",
Version = "[1.0.0-*,)"
},
null
},
{
new PackageDependencyInfo{
Name = "BundlerMinifier.Core",
Version = ConstantPackageVersions.BundleMinifierToolVersion } }
Version = "[1.0.0-*,)"
},
new PackageDependencyInfo {
Name = "BundlerMinifier.Core",
Version = ConstantPackageVersions.BundleMinifierToolVersion
}
}
};
}
}

View file

@ -13,6 +13,7 @@ using Microsoft.DotNet.Internal.ProjectModel;
using Microsoft.DotNet.Tools.Common;
using NuGet.Frameworks;
using NuGet.LibraryModel;
using NuGet.Versioning;
namespace Microsoft.DotNet.ProjectJsonMigration.Rules
{
@ -274,14 +275,17 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
private PackageDependencyInfo ToPackageDependencyInfo(
ProjectLibraryDependency dependency,
IDictionary<string, PackageDependencyInfo> dependencyToVersionMap)
IDictionary<PackageDependencyInfo, PackageDependencyInfo> dependencyToVersionMap)
{
var name = dependency.Name;
var version = dependency.LibraryRange?.VersionRange?.OriginalString;
if (dependencyToVersionMap.ContainsKey(name))
var possibleMappings = dependencyToVersionMap.Where(c => c.Key.Name == name);
if (possibleMappings.Any())
{
var dependencyInfo = dependencyToVersionMap[name];
var possibleVersions = possibleMappings.Select(p => VersionRange.Parse(p.Key.Version));
var bestMatchVersion = possibleVersions.First(p => p.Satisfies(dependency.LibraryRange?.VersionRange?.ToNonSnapshotRange().MinVersion));
var dependencyInfo = possibleMappings.First(c => c.Key.Version == bestMatchVersion.OriginalString).Value;
if (dependencyInfo == null)
{
return null;

View file

@ -12,19 +12,22 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
public class GivenThatIWantToMigrateTools : PackageDependenciesTestBase
{
[Theory]
[InlineData("Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "Microsoft.VisualStudio.Web.CodeGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
public void It_migrates_project_dependencies_to_a_new_name_and_version(
[InlineData("Microsoft.EntityFrameworkCore.Tools", "1.0.0-preview2-final", "Microsoft.EntityFrameworkCore.Tools", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "1.0.0-preview2-final", "Microsoft.VisualStudio.Web.CodeGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "1.0.0-*", "Microsoft.VisualStudio.Web.CodeGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "1.0.0-preview3-final", "Microsoft.VisualStudio.Web.CodeGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "1.1.0-preview4-final", "Microsoft.VisualStudio.Web.CodeGeneration.Design", "1.1.0-msbuild3-final")]
public void ItMigratesProjectDependenciesToANewNameAndVersion(
string sourceToolName,
string sourceVersion,
string targetToolName,
string targetVersion)
{
const string anyVersion = "1.0.0-preview2-final";
var mockProj = RunPackageDependenciesRuleOnPj("{ \"dependencies\": { \"" + sourceToolName + "\" : { \"version\": \"" + anyVersion + "\", \"type\": \"build\" } } }");
var mockProj = RunPackageDependenciesRuleOnPj("{ \"dependencies\": { \"" + sourceToolName + "\" : { \"version\": \"" + sourceVersion + "\", \"type\": \"build\" } } }");
var packageRef = mockProj.Items.First(i => i.Include == targetToolName && i.ItemType == "PackageReference");
packageRef.GetMetadataWithName("Version").Value.Should().Be(ConstantPackageVersions.AspNetToolsVersion);
packageRef.GetMetadataWithName("Version").Value.Should().Be(targetVersion);
packageRef.GetMetadataWithName("PrivateAssets").Value.Should().NotBeNull().And.Be("All");
}
@ -35,7 +38,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
[InlineData("Microsoft.VisualStudio.Web.CodeGeneration.Tools")]
[InlineData("dotnet-test-xunit")]
[InlineData("dotnet-test-mstest")]
public void It_does_not_migrate_project_tool_dependency_that_is_no_longer_needed(string dependencyName)
public void ItDoesNotMigrateProjectToolDependencyThatIsNoLongerNeeded(string dependencyName)
{
var mockProj = RunPackageDependenciesRuleOnPj(@"
{
@ -59,7 +62,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
[InlineData("Microsoft.DotNet.Watcher.Tools", "Microsoft.DotNet.Watcher.Tools", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.Extensions.SecretManager.Tools", "Microsoft.Extensions.SecretManager.Tools", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("BundlerMinifier.Core", "BundlerMinifier.Core", ConstantPackageVersions.BundleMinifierToolVersion)]
public void It_migrates_asp_project_tools_to_a_new_name_and_version(
public void ItMigratesAspProjectToolsToANewNameAndVersion(
string sourceToolName,
string targetToolName,
string targetVersion)
@ -73,7 +76,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
[Theory]
[InlineData("Microsoft.AspNetCore.Razor.Tools")]
[InlineData("Microsoft.AspNetCore.Server.IISIntegration.Tools")]
public void It_does_not_migrate_asp_project_tool(string toolName)
public void ItDoesNotMigrateAspProjectTool(string toolName)
{
var mockProj = RunPackageDependenciesRuleOnPj(@"
{