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:
parent
4319668111
commit
89fba856e8
4 changed files with 227 additions and 59 deletions
|
@ -6,6 +6,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
internal class ConstantPackageVersions
|
internal class ConstantPackageVersions
|
||||||
{
|
{
|
||||||
public const string AspNetToolsVersion = "1.0.0-msbuild3-final";
|
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 TestSdkPackageVersion = "15.0.0-preview-20170106-08";
|
||||||
public const string XUnitPackageVersion = "2.2.0-beta4-build3444";
|
public const string XUnitPackageVersion = "2.2.0-beta4-build3444";
|
||||||
public const string XUnitRunnerPackageVersion = "2.2.0-beta4-build1194";
|
public const string XUnitRunnerPackageVersion = "2.2.0-beta4-build1194";
|
||||||
|
|
|
@ -26,55 +26,215 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
public const string DotnetTestXunit = "dotnet-test-xunit";
|
public const string DotnetTestXunit = "dotnet-test-xunit";
|
||||||
public const string DotnetTestMSTest = "dotnet-test-mstest";
|
public const string DotnetTestMSTest = "dotnet-test-mstest";
|
||||||
|
|
||||||
public static readonly IDictionary<string, PackageDependencyInfo> ProjectDependencyPackages =
|
public static readonly IDictionary<PackageDependencyInfo, PackageDependencyInfo> ProjectDependencyPackages =
|
||||||
new Dictionary<string, PackageDependencyInfo> {
|
new Dictionary<PackageDependencyInfo, PackageDependencyInfo> {
|
||||||
{"Microsoft.EntityFrameworkCore.Tools", new PackageDependencyInfo {
|
{
|
||||||
Name = "Microsoft.EntityFrameworkCore.Tools",
|
new PackageDependencyInfo {
|
||||||
Version = ConstantPackageVersions.AspNetToolsVersion } },
|
Name = "Microsoft.EntityFrameworkCore.Tools",
|
||||||
{ "Microsoft.AspNetCore.Razor.Tools", null },
|
Version = "[1.0.0-*,)"
|
||||||
{ "Microsoft.AspNetCore.Razor.Design", null },
|
},
|
||||||
{ "Microsoft.VisualStudio.Web.CodeGenerators.Mvc", new PackageDependencyInfo {
|
new PackageDependencyInfo {
|
||||||
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Design",
|
Name = "Microsoft.EntityFrameworkCore.Tools",
|
||||||
Version = ConstantPackageVersions.AspNetToolsVersion } },
|
Version = ConstantPackageVersions.AspNetToolsVersion }
|
||||||
{ "Microsoft.VisualStudio.Web.CodeGeneration.Tools", null},
|
},
|
||||||
{ TestSdkPackageName, new PackageDependencyInfo {
|
{
|
||||||
Name = TestSdkPackageName,
|
new PackageDependencyInfo
|
||||||
Version = ConstantPackageVersions.TestSdkPackageVersion } },
|
{
|
||||||
{ XUnitPackageName, new PackageDependencyInfo {
|
Name = "Microsoft.AspNetCore.Razor.Tools",
|
||||||
Name = XUnitPackageName,
|
Version = "[1.0.0-*,)"
|
||||||
Version = ConstantPackageVersions.XUnitPackageVersion } },
|
},
|
||||||
{ XUnitRunnerPackageName, new PackageDependencyInfo {
|
null
|
||||||
Name = XUnitRunnerPackageName,
|
},
|
||||||
Version = ConstantPackageVersions.XUnitRunnerPackageVersion } },
|
{
|
||||||
{ MstestTestAdapterName, new PackageDependencyInfo {
|
new PackageDependencyInfo
|
||||||
Name = MstestTestAdapterName,
|
{
|
||||||
Version = ConstantPackageVersions.MstestTestAdapterVersion } },
|
Name = "Microsoft.AspNetCore.Razor.Design",
|
||||||
{ MstestTestFrameworkName, new PackageDependencyInfo {
|
Version = "[1.0.0-*,)"
|
||||||
Name = MstestTestFrameworkName,
|
},
|
||||||
Version = ConstantPackageVersions.MstestTestFrameworkVersion } },
|
null
|
||||||
{ DotnetTestXunit, null },
|
},
|
||||||
{ DotnetTestMSTest, 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.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 = "[1.0.0-*,)"
|
||||||
|
},
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = TestSdkPackageName,
|
||||||
|
Version = ConstantPackageVersions.TestSdkPackageVersion
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = XUnitPackageName,
|
||||||
|
Version = "[1.0.0-*,)"
|
||||||
|
},
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = XUnitPackageName,
|
||||||
|
Version = ConstantPackageVersions.XUnitPackageVersion
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = XUnitRunnerPackageName,
|
||||||
|
Version = "[1.0.0-*,)"
|
||||||
|
},
|
||||||
|
new PackageDependencyInfo {
|
||||||
|
Name = XUnitRunnerPackageName,
|
||||||
|
Version = ConstantPackageVersions.XUnitRunnerPackageVersion
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = MstestTestAdapterName,
|
||||||
|
Version = "[1.0.0-*,)"
|
||||||
|
},
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = MstestTestAdapterName,
|
||||||
|
Version = ConstantPackageVersions.MstestTestAdapterVersion
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = MstestTestFrameworkName,
|
||||||
|
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 =
|
public static readonly IDictionary<PackageDependencyInfo, PackageDependencyInfo> ProjectToolPackages =
|
||||||
new Dictionary<string, PackageDependencyInfo> {
|
new Dictionary<PackageDependencyInfo, PackageDependencyInfo> {
|
||||||
{"Microsoft.EntityFrameworkCore.Tools", new PackageDependencyInfo {
|
{
|
||||||
Name = "Microsoft.EntityFrameworkCore.Tools.DotNet",
|
new PackageDependencyInfo
|
||||||
Version = ConstantPackageVersions.AspNetToolsVersion } },
|
{
|
||||||
{ "Microsoft.AspNetCore.Razor.Tools", null },
|
Name = "Microsoft.EntityFrameworkCore.Tools",
|
||||||
{ "Microsoft.VisualStudio.Web.CodeGeneration.Tools", new PackageDependencyInfo {
|
Version = "[1.0.0-*,)"
|
||||||
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Tools",
|
},
|
||||||
Version = ConstantPackageVersions.AspNetToolsVersion } },
|
new PackageDependencyInfo {
|
||||||
{ "Microsoft.DotNet.Watcher.Tools", new PackageDependencyInfo {
|
Name = "Microsoft.EntityFrameworkCore.Tools.DotNet",
|
||||||
Name = "Microsoft.DotNet.Watcher.Tools",
|
Version = ConstantPackageVersions.AspNetToolsVersion
|
||||||
Version = ConstantPackageVersions.AspNetToolsVersion } },
|
}
|
||||||
{ "Microsoft.Extensions.SecretManager.Tools", new PackageDependencyInfo {
|
},
|
||||||
Name = "Microsoft.Extensions.SecretManager.Tools",
|
{
|
||||||
Version = ConstantPackageVersions.AspNetToolsVersion } },
|
new PackageDependencyInfo
|
||||||
{ "Microsoft.AspNetCore.Server.IISIntegration.Tools", null},
|
{
|
||||||
{ "BundlerMinifier.Core", new PackageDependencyInfo {
|
Name = "Microsoft.AspNetCore.Razor.Tools",
|
||||||
Name = "BundlerMinifier.Core",
|
Version = "[1.0.0-*,)"
|
||||||
Version = ConstantPackageVersions.BundleMinifierToolVersion } }
|
},
|
||||||
|
null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Tools",
|
||||||
|
Version = "[1.0.0-*,)"
|
||||||
|
},
|
||||||
|
new PackageDependencyInfo {
|
||||||
|
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Tools",
|
||||||
|
Version = ConstantPackageVersions.AspNetToolsVersion
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = "Microsoft.DotNet.Watcher.Tools",
|
||||||
|
Version = "[1.0.0-*,)"
|
||||||
|
},
|
||||||
|
new PackageDependencyInfo {
|
||||||
|
Name = "Microsoft.DotNet.Watcher.Tools",
|
||||||
|
Version = ConstantPackageVersions.AspNetToolsVersion
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
new PackageDependencyInfo
|
||||||
|
{
|
||||||
|
Name = "Microsoft.Extensions.SecretManager.Tools",
|
||||||
|
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 = "[1.0.0-*,)"
|
||||||
|
},
|
||||||
|
new PackageDependencyInfo {
|
||||||
|
Name = "BundlerMinifier.Core",
|
||||||
|
Version = ConstantPackageVersions.BundleMinifierToolVersion
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,6 +13,7 @@ using Microsoft.DotNet.Internal.ProjectModel;
|
||||||
using Microsoft.DotNet.Tools.Common;
|
using Microsoft.DotNet.Tools.Common;
|
||||||
using NuGet.Frameworks;
|
using NuGet.Frameworks;
|
||||||
using NuGet.LibraryModel;
|
using NuGet.LibraryModel;
|
||||||
|
using NuGet.Versioning;
|
||||||
|
|
||||||
namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||||
{
|
{
|
||||||
|
@ -274,14 +275,17 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||||
|
|
||||||
private PackageDependencyInfo ToPackageDependencyInfo(
|
private PackageDependencyInfo ToPackageDependencyInfo(
|
||||||
ProjectLibraryDependency dependency,
|
ProjectLibraryDependency dependency,
|
||||||
IDictionary<string, PackageDependencyInfo> dependencyToVersionMap)
|
IDictionary<PackageDependencyInfo, PackageDependencyInfo> dependencyToVersionMap)
|
||||||
{
|
{
|
||||||
var name = dependency.Name;
|
var name = dependency.Name;
|
||||||
var version = dependency.LibraryRange?.VersionRange?.OriginalString;
|
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)
|
if (dependencyInfo == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -12,19 +12,22 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
||||||
public class GivenThatIWantToMigrateTools : PackageDependenciesTestBase
|
public class GivenThatIWantToMigrateTools : PackageDependenciesTestBase
|
||||||
{
|
{
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
[InlineData("Microsoft.EntityFrameworkCore.Tools", "1.0.0-preview2-final", "Microsoft.EntityFrameworkCore.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
||||||
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "Microsoft.VisualStudio.Web.CodeGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
|
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "1.0.0-preview2-final", "Microsoft.VisualStudio.Web.CodeGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
|
||||||
public void It_migrates_project_dependencies_to_a_new_name_and_version(
|
[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 sourceToolName,
|
||||||
|
string sourceVersion,
|
||||||
string targetToolName,
|
string targetToolName,
|
||||||
string targetVersion)
|
string targetVersion)
|
||||||
{
|
{
|
||||||
const string anyVersion = "1.0.0-preview2-final";
|
var mockProj = RunPackageDependenciesRuleOnPj("{ \"dependencies\": { \"" + sourceToolName + "\" : { \"version\": \"" + sourceVersion + "\", \"type\": \"build\" } } }");
|
||||||
var mockProj = RunPackageDependenciesRuleOnPj("{ \"dependencies\": { \"" + sourceToolName + "\" : { \"version\": \"" + anyVersion + "\", \"type\": \"build\" } } }");
|
|
||||||
|
|
||||||
var packageRef = mockProj.Items.First(i => i.Include == targetToolName && i.ItemType == "PackageReference");
|
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");
|
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("Microsoft.VisualStudio.Web.CodeGeneration.Tools")]
|
||||||
[InlineData("dotnet-test-xunit")]
|
[InlineData("dotnet-test-xunit")]
|
||||||
[InlineData("dotnet-test-mstest")]
|
[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(@"
|
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.DotNet.Watcher.Tools", "Microsoft.DotNet.Watcher.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
||||||
[InlineData("Microsoft.Extensions.SecretManager.Tools", "Microsoft.Extensions.SecretManager.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
[InlineData("Microsoft.Extensions.SecretManager.Tools", "Microsoft.Extensions.SecretManager.Tools", ConstantPackageVersions.AspNetToolsVersion)]
|
||||||
[InlineData("BundlerMinifier.Core", "BundlerMinifier.Core", ConstantPackageVersions.BundleMinifierToolVersion)]
|
[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 sourceToolName,
|
||||||
string targetToolName,
|
string targetToolName,
|
||||||
string targetVersion)
|
string targetVersion)
|
||||||
|
@ -73,7 +76,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("Microsoft.AspNetCore.Razor.Tools")]
|
[InlineData("Microsoft.AspNetCore.Razor.Tools")]
|
||||||
[InlineData("Microsoft.AspNetCore.Server.IISIntegration.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(@"
|
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue