From 1232a38e519cf7c7970425d017014b60d8c026ba Mon Sep 17 00:00:00 2001 From: Bryan Thornbury Date: Wed, 5 Oct 2016 11:36:23 -0700 Subject: [PATCH 1/2] dotnet cli migrate tools ref --- .../DefaultMigrationRuleSet.cs | 2 +- ...MigratePackageDependenciesAndToolsRule.cs} | 31 ++++++++++++++-- ...enThatIWantToMigratePackageDependencies.cs | 35 +++++++++++++++++-- 3 files changed, 62 insertions(+), 6 deletions(-) rename src/Microsoft.DotNet.ProjectJsonMigration/Rules/{MigratePackageDependenciesRule.cs => MigratePackageDependenciesAndToolsRule.cs} (90%) diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/DefaultMigrationRuleSet.cs b/src/Microsoft.DotNet.ProjectJsonMigration/DefaultMigrationRuleSet.cs index 32412df03..6fd2db4f7 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/DefaultMigrationRuleSet.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/DefaultMigrationRuleSet.cs @@ -16,7 +16,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration new MigrateRuntimeOptionsRule(), new MigratePublishOptionsRule(), new MigrateProjectDependenciesRule(), - new MigratePackageDependenciesRule(), + new MigratePackageDependenciesAndToolsRule(), new MigrateConfigurationsRule(), new MigrateScriptsRule(), new WorkaroundOptionsRule(), diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs similarity index 90% rename from src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesRule.cs rename to src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs index a619a40ea..a637dcc5a 100644 --- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesRule.cs +++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigratePackageDependenciesAndToolsRule.cs @@ -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 ToolTransform => new AddItemTransform( + "DotNetCliToolsReference", + dep => dep.Name, + dep => "", + dep => true) + .WithMetadata("Version", r => r.LibraryRange.VersionRange.OriginalString); + private AddItemTransform ImportsTransformation => new AddItemTransform( "PackageTargetFallback", t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}", diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index 69e80302a..29014611a 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -23,12 +23,25 @@ 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"" + } + }"); + + Console.WriteLine(mockProj.RawXml); + EmitsToolReferences(mockProj, Tuple.Create("APackage", "1.0.0-preview"), Tuple.Create("BPackage", "1.0.0")); + } + private void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple[] packageSpecs) { foreach (var packageSpec in packageSpecs) @@ -47,12 +60,28 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } } + private void EmitsToolReferences(ProjectRootElement mockProj, params Tuple[] 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); } } From 310da80c3a9bfb99491c6c875ed0530b74faca9c Mon Sep 17 00:00:00 2001 From: Bryan Thornbury Date: Wed, 5 Oct 2016 11:39:14 -0700 Subject: [PATCH 2/2] remove write --- .../Rules/GivenThatIWantToMigratePackageDependencies.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs index 29014611a..a4562cbad 100644 --- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs +++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigratePackageDependencies.cs @@ -38,7 +38,6 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests } }"); - Console.WriteLine(mockProj.RawXml); EmitsToolReferences(mockProj, Tuple.Create("APackage", "1.0.0-preview"), Tuple.Create("BPackage", "1.0.0")); }