Merge pull request #4320 from brthor/brthor/toolsrefmigration

dotnet cli migrate tools ref
This commit is contained in:
Bryan Thornbury 2016-10-05 13:39:34 -07:00 committed by GitHub
commit 50e83b9c65
3 changed files with 61 additions and 6 deletions

View file

@ -16,7 +16,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
new MigrateRuntimeOptionsRule(),
new MigratePublishOptionsRule(),
new MigrateProjectDependenciesRule(),
new MigratePackageDependenciesRule(),
new MigratePackageDependenciesAndToolsRule(),
new MigrateConfigurationsRule(),
new MigrateScriptsRule(),
new WorkaroundOptionsRule(),

View file

@ -16,13 +16,13 @@ using NuGet.LibraryModel;
namespace Microsoft.DotNet.ProjectJsonMigration.Rules
{
public class MigratePackageDependenciesRule : IMigrationRule
public class MigratePackageDependenciesAndToolsRule : IMigrationRule
{
private readonly ITransformApplicator _transformApplicator;
private readonly ProjectDependencyFinder _projectDependencyFinder;
private string _projectDirectory;
public MigratePackageDependenciesRule(ITransformApplicator transformApplicator = null)
public MigratePackageDependenciesAndToolsRule(ITransformApplicator transformApplicator = null)
{
_transformApplicator = transformApplicator ?? new TransformApplicator();
_projectDependencyFinder = new ProjectDependencyFinder();
@ -69,6 +69,9 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
targetFramework.Dependencies,
migrationRuleInputs.ProjectXproj);
}
// Tools
MigrateTools(project, migrationRuleInputs.OutputMSBuildProject);
}
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(
Project project,
ProjectRootElement output,
@ -212,6 +232,13 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
dep => true)
.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>(
"PackageTargetFallback",
t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}",

View file

@ -23,12 +23,24 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
""BPackage"" : ""1.0.0""
}
}");
Console.WriteLine(mockProj.RawXml);
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)
{
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)
{
testDirectory = testDirectory ?? Temp.CreateDirectory().Path;
return TemporaryProjectFileRuleRunner.RunRules(new IMigrationRule[]
{
new MigratePackageDependenciesRule()
new MigratePackageDependenciesAndToolsRule()
}, s, testDirectory);
}
}