Merge pull request #4320 from brthor/brthor/toolsrefmigration
dotnet cli migrate tools ref
This commit is contained in:
commit
50e83b9c65
3 changed files with 61 additions and 6 deletions
|
@ -16,7 +16,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
new MigrateRuntimeOptionsRule(),
|
new MigrateRuntimeOptionsRule(),
|
||||||
new MigratePublishOptionsRule(),
|
new MigratePublishOptionsRule(),
|
||||||
new MigrateProjectDependenciesRule(),
|
new MigrateProjectDependenciesRule(),
|
||||||
new MigratePackageDependenciesRule(),
|
new MigratePackageDependenciesAndToolsRule(),
|
||||||
new MigrateConfigurationsRule(),
|
new MigrateConfigurationsRule(),
|
||||||
new MigrateScriptsRule(),
|
new MigrateScriptsRule(),
|
||||||
new WorkaroundOptionsRule(),
|
new WorkaroundOptionsRule(),
|
||||||
|
|
|
@ -16,13 +16,13 @@ using NuGet.LibraryModel;
|
||||||
|
|
||||||
namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||||
{
|
{
|
||||||
public class MigratePackageDependenciesRule : IMigrationRule
|
public class MigratePackageDependenciesAndToolsRule : IMigrationRule
|
||||||
{
|
{
|
||||||
private readonly ITransformApplicator _transformApplicator;
|
private readonly ITransformApplicator _transformApplicator;
|
||||||
private readonly ProjectDependencyFinder _projectDependencyFinder;
|
private readonly ProjectDependencyFinder _projectDependencyFinder;
|
||||||
private string _projectDirectory;
|
private string _projectDirectory;
|
||||||
|
|
||||||
public MigratePackageDependenciesRule(ITransformApplicator transformApplicator = null)
|
public MigratePackageDependenciesAndToolsRule(ITransformApplicator transformApplicator = null)
|
||||||
{
|
{
|
||||||
_transformApplicator = transformApplicator ?? new TransformApplicator();
|
_transformApplicator = transformApplicator ?? new TransformApplicator();
|
||||||
_projectDependencyFinder = new ProjectDependencyFinder();
|
_projectDependencyFinder = new ProjectDependencyFinder();
|
||||||
|
@ -69,6 +69,9 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||||
targetFramework.Dependencies,
|
targetFramework.Dependencies,
|
||||||
migrationRuleInputs.ProjectXproj);
|
migrationRuleInputs.ProjectXproj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tools
|
||||||
|
MigrateTools(project, migrationRuleInputs.OutputMSBuildProject);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MigrateImports(ProjectItemGroupElement commonItemGroup, TargetFrameworkInformation targetFramework)
|
private void MigrateImports(ProjectItemGroupElement commonItemGroup, TargetFrameworkInformation targetFramework)
|
||||||
|
@ -93,6 +96,23 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void MigrateTools(
|
||||||
|
Project project,
|
||||||
|
ProjectRootElement output)
|
||||||
|
{
|
||||||
|
if (project.Tools == null || !project.Tools.Any())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var itemGroup = output.AddItemGroup();
|
||||||
|
|
||||||
|
foreach (var tool in project.Tools)
|
||||||
|
{
|
||||||
|
_transformApplicator.Execute(ToolTransform.Transform(tool), itemGroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void MigrateDependencies(
|
private void MigrateDependencies(
|
||||||
Project project,
|
Project project,
|
||||||
ProjectRootElement output,
|
ProjectRootElement output,
|
||||||
|
@ -212,6 +232,13 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
|
||||||
dep => true)
|
dep => true)
|
||||||
.WithMetadata("Version", r => r.Version);
|
.WithMetadata("Version", r => r.Version);
|
||||||
|
|
||||||
|
private AddItemTransform<ProjectLibraryDependency> ToolTransform => new AddItemTransform<ProjectLibraryDependency>(
|
||||||
|
"DotNetCliToolsReference",
|
||||||
|
dep => dep.Name,
|
||||||
|
dep => "",
|
||||||
|
dep => true)
|
||||||
|
.WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString);
|
||||||
|
|
||||||
private AddItemTransform<TargetFrameworkInformation> ImportsTransformation => new AddItemTransform<TargetFrameworkInformation>(
|
private AddItemTransform<TargetFrameworkInformation> ImportsTransformation => new AddItemTransform<TargetFrameworkInformation>(
|
||||||
"PackageTargetFallback",
|
"PackageTargetFallback",
|
||||||
t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}",
|
t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}",
|
|
@ -23,12 +23,24 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
||||||
""BPackage"" : ""1.0.0""
|
""BPackage"" : ""1.0.0""
|
||||||
}
|
}
|
||||||
}");
|
}");
|
||||||
|
|
||||||
Console.WriteLine(mockProj.RawXml);
|
|
||||||
|
|
||||||
EmitsPackageReferences(mockProj, Tuple.Create("APackage", "1.0.0-preview", ""), Tuple.Create("BPackage", "1.0.0", ""));
|
EmitsPackageReferences(mockProj, Tuple.Create("APackage", "1.0.0-preview", ""), Tuple.Create("BPackage", "1.0.0", ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void It_migrates_Tools()
|
||||||
|
{
|
||||||
|
var mockProj = RunPackageDependenciesRuleOnPj(@"
|
||||||
|
{
|
||||||
|
""tools"": {
|
||||||
|
""APackage"" : ""1.0.0-preview"",
|
||||||
|
""BPackage"" : ""1.0.0""
|
||||||
|
}
|
||||||
|
}");
|
||||||
|
|
||||||
|
EmitsToolReferences(mockProj, Tuple.Create("APackage", "1.0.0-preview"), Tuple.Create("BPackage", "1.0.0"));
|
||||||
|
}
|
||||||
|
|
||||||
private void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple<string, string, string>[] packageSpecs)
|
private void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple<string, string, string>[] packageSpecs)
|
||||||
{
|
{
|
||||||
foreach (var packageSpec in packageSpecs)
|
foreach (var packageSpec in packageSpecs)
|
||||||
|
@ -47,12 +59,28 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void EmitsToolReferences(ProjectRootElement mockProj, params Tuple<string, string>[] toolSpecs)
|
||||||
|
{
|
||||||
|
foreach (var toolSpec in toolSpecs)
|
||||||
|
{
|
||||||
|
var packageName = toolSpec.Item1;
|
||||||
|
var packageVersion = toolSpec.Item2;
|
||||||
|
|
||||||
|
var items = mockProj.Items
|
||||||
|
.Where(i => i.ItemType == "DotNetCliToolsReference")
|
||||||
|
.Where(i => i.Include == packageName)
|
||||||
|
.Where(i => i.GetMetadataWithName("Version").Value == packageVersion);
|
||||||
|
|
||||||
|
items.Should().HaveCount(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ProjectRootElement RunPackageDependenciesRuleOnPj(string s, string testDirectory = null)
|
private ProjectRootElement RunPackageDependenciesRuleOnPj(string s, string testDirectory = null)
|
||||||
{
|
{
|
||||||
testDirectory = testDirectory ?? Temp.CreateDirectory().Path;
|
testDirectory = testDirectory ?? Temp.CreateDirectory().Path;
|
||||||
return TemporaryProjectFileRuleRunner.RunRules(new IMigrationRule[]
|
return TemporaryProjectFileRuleRunner.RunRules(new IMigrationRule[]
|
||||||
{
|
{
|
||||||
new MigratePackageDependenciesRule()
|
new MigratePackageDependenciesAndToolsRule()
|
||||||
}, s, testDirectory);
|
}, s, testDirectory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue