Address PR comments
This commit is contained in:
		
					parent
					
						
							
								037da3fc01
							
						
					
				
			
			
				commit
				
					
						3821d39d6c
					
				
			
		
					 5 changed files with 88 additions and 31 deletions
				
			
		|  | @ -955,6 +955,21 @@ namespace Microsoft.DotNet.Internal.ProjectModel | |||
|             return (rawProject.SelectToken(jpathToNewFormatObject) != null); | ||||
|         } | ||||
| 
 | ||||
|         private static void ConvertFromDeprecatedFormat( | ||||
|             JObject rawProject, | ||||
|             string jpathToObject, | ||||
|             string deprecatedKey, | ||||
|             string newKey | ||||
|             ) | ||||
|         { | ||||
|             var deprecatedValue = rawProject.Value<JToken>(deprecatedKey); | ||||
|             if (deprecatedValue != null) | ||||
|             { | ||||
|                 var objectNode = GetOrCreateObjectHierarchy(rawProject, jpathToObject); | ||||
|                 objectNode[newKey] = deprecatedValue.DeepClone(); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private static JObject GetOrCreateObjectHierarchy(JObject rawProject, string jpath) | ||||
|         { | ||||
|             var currentObject = rawProject as JObject; | ||||
|  | @ -974,21 +989,6 @@ namespace Microsoft.DotNet.Internal.ProjectModel | |||
|             return currentObject; | ||||
|         } | ||||
| 
 | ||||
|         private static void ConvertFromDeprecatedFormat( | ||||
|             JObject rawProject, | ||||
|             string jpathToObject, | ||||
|             string deprecatedKey, | ||||
|             string newKey | ||||
|             ) | ||||
|         { | ||||
|             var deprecatedValue = rawProject.Value<JToken>(deprecatedKey); | ||||
|             if (deprecatedValue != null) | ||||
|             { | ||||
|                 var objectNode = GetOrCreateObjectHierarchy(rawProject, jpathToObject); | ||||
|                 objectNode[newKey] = deprecatedValue.DeepClone(); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private static bool TryGetStringEnumerable(JToken token, out IEnumerable<string> result) | ||||
|         { | ||||
|             IEnumerable<string> values; | ||||
|  |  | |||
|  | @ -42,10 +42,11 @@ namespace Microsoft.DotNet.ProjectJsonMigration | |||
|             IEnumerable<ProjectDependency> projectDependencies = null; | ||||
|             var projectMigrationReports = new List<ProjectMigrationReport>(); | ||||
| 
 | ||||
|             List<string> warnings = null; | ||||
|             try | ||||
|             { | ||||
|                 // Verify up front so we can prefer these errors over an unresolved project dependency | ||||
|                 VerifyInputs(rootInputs, rootSettings); | ||||
|                 VerifyInputs(rootInputs, rootSettings, out warnings); | ||||
| 
 | ||||
|                 projectMigrationReports.Add(MigrateProject(rootSettings)); | ||||
|                  | ||||
|  | @ -68,7 +69,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration | |||
|                             rootSettings.ProjectDirectory, | ||||
|                             rootInputs?.DefaultProjectContext?.GetProjectName(), | ||||
|                             new List<MigrationError> {e.Error}, | ||||
|                             null) | ||||
|                             warnings) | ||||
|                     }); | ||||
|             } | ||||
| 
 | ||||
|  | @ -144,6 +145,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration | |||
|             var projectName = migrationRuleInputs.DefaultProjectContext.GetProjectName(); | ||||
|             var outputProject = Path.Combine(migrationSettings.OutputDirectory, projectName + ".csproj"); | ||||
| 
 | ||||
|             List<string> warnings = null; | ||||
|             try | ||||
|             { | ||||
|                 if (File.Exists(outputProject)) | ||||
|  | @ -166,7 +168,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration | |||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 VerifyInputs(migrationRuleInputs, migrationSettings); | ||||
|                 VerifyInputs(migrationRuleInputs, migrationSettings, out warnings); | ||||
| 
 | ||||
|                 SetupOutputDirectory(migrationSettings.ProjectDirectory, migrationSettings.OutputDirectory); | ||||
| 
 | ||||
|  | @ -179,7 +181,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration | |||
|                     exc.Error | ||||
|                 }; | ||||
| 
 | ||||
|                 return new ProjectMigrationReport(migrationSettings.ProjectDirectory, projectName, error, null); | ||||
|                 return new ProjectMigrationReport(migrationSettings.ProjectDirectory, projectName, error, warnings); | ||||
|             } | ||||
| 
 | ||||
|             List<string> csprojDependencies = null; | ||||
|  | @ -208,7 +210,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration | |||
|                 projectName, | ||||
|                 outputProject, | ||||
|                 null, | ||||
|                 null, | ||||
|                 warnings, | ||||
|                 csprojDependencies); | ||||
|         } | ||||
| 
 | ||||
|  | @ -235,13 +237,22 @@ namespace Microsoft.DotNet.ProjectJsonMigration | |||
|             return new MigrationRuleInputs(projectContexts, templateMSBuildProject, itemGroup, propertyGroup, xproj); | ||||
|         } | ||||
| 
 | ||||
|         private void VerifyInputs(MigrationRuleInputs migrationRuleInputs, MigrationSettings migrationSettings) | ||||
|         private void VerifyInputs( | ||||
|             MigrationRuleInputs migrationRuleInputs, | ||||
|             MigrationSettings migrationSettings, | ||||
|             out List<string> warningMessages | ||||
|             ) | ||||
|         { | ||||
|             VerifyProject(migrationRuleInputs.ProjectContexts, migrationSettings.ProjectDirectory); | ||||
|             VerifyProject(migrationRuleInputs.ProjectContexts, migrationSettings.ProjectDirectory, out warningMessages); | ||||
|         } | ||||
| 
 | ||||
|         private void VerifyProject(IEnumerable<ProjectContext> projectContexts, string projectDirectory) | ||||
|         private void VerifyProject( | ||||
|             IEnumerable<ProjectContext> projectContexts, | ||||
|             string projectDirectory, | ||||
|             out List<string> warningMessages) | ||||
|         { | ||||
|             warningMessages = null; | ||||
| 
 | ||||
|             if (!projectContexts.Any()) | ||||
|             { | ||||
|                 MigrationErrorCodes.MIGRATE1013(String.Format(LocalizableStrings.MIGRATE1013Arg, projectDirectory)).Throw(); | ||||
|  | @ -255,11 +266,14 @@ namespace Microsoft.DotNet.ProjectJsonMigration | |||
|                 var warnings = diagnostics.Where(d => d.Severity == DiagnosticMessageSeverity.Warning); | ||||
|                 if (warnings.Any()) | ||||
|                 { | ||||
|                     var deprecatedProjectJsonWarnings = string.Join( | ||||
|                     var migrationError = MigrationErrorCodes.MIGRATE1011(String.Format( | ||||
|                         "{0}{1}{2}", | ||||
|                         projectDirectory, | ||||
|                         Environment.NewLine, | ||||
|                         diagnostics.Select(d => FormatDiagnosticMessage(d))); | ||||
|                     var warningMessage = $"{projectDirectory}{Environment.NewLine}{deprecatedProjectJsonWarnings}"; | ||||
|                     Reporter.Output.WriteLine(warningMessage.Yellow()); | ||||
|                         string.Join(Environment.NewLine, diagnostics.Select(d => FormatDiagnosticMessage(d))))); | ||||
| 
 | ||||
|                     warningMessages = new List<string>(); | ||||
|                     warningMessages.Add(migrationError.GetFormattedErrorMessage()); | ||||
|                 } | ||||
| 
 | ||||
|                 var errors = diagnostics.Where(d => d.Severity == DiagnosticMessageSeverity.Error); | ||||
|  |  | |||
|  | @ -262,6 +262,8 @@ namespace Microsoft.DotNet.Tools.Migrate | |||
|             { | ||||
|                 var errorContent = GetProjectReportErrorContent(projectMigrationReport, colored: true); | ||||
|                 var successContent = GetProjectReportSuccessContent(projectMigrationReport, colored: true); | ||||
|                 var warningContent = GetProjectReportWarningContent(projectMigrationReport, colored: true); | ||||
|                 Reporter.Output.WriteLine(warningContent); | ||||
|                 if (!string.IsNullOrEmpty(errorContent)) | ||||
|                 { | ||||
|                     Reporter.Error.WriteLine(errorContent); | ||||
|  | @ -290,6 +292,8 @@ namespace Microsoft.DotNet.Tools.Migrate | |||
|             { | ||||
|                 var errorContent = GetProjectReportErrorContent(projectMigrationReport, colored: colored); | ||||
|                 var successContent = GetProjectReportSuccessContent(projectMigrationReport, colored: colored); | ||||
|                 var warningContent = GetProjectReportWarningContent(projectMigrationReport, colored: colored); | ||||
|                 sb.AppendLine(warningContent); | ||||
|                 if (!string.IsNullOrEmpty(errorContent)) | ||||
|                 { | ||||
|                     sb.AppendLine(errorContent); | ||||
|  | @ -331,6 +335,19 @@ namespace Microsoft.DotNet.Tools.Migrate | |||
|                 projectMigrationReport.ProjectDirectory)); | ||||
|         } | ||||
| 
 | ||||
|         private string GetProjectReportWarningContent(ProjectMigrationReport projectMigrationReport, bool colored) | ||||
|         { | ||||
|             StringBuilder sb = new StringBuilder(); | ||||
|             Func<string, string> YellowIfColored = (str) => colored ? str.Yellow() : str; | ||||
| 
 | ||||
|             foreach (var warning in projectMigrationReport.Warnings) | ||||
|             { | ||||
|                 sb.AppendLine(YellowIfColored(warning)); | ||||
|             } | ||||
| 
 | ||||
|             return sb.ToString(); | ||||
|         } | ||||
| 
 | ||||
|         private string GetProjectReportErrorContent(ProjectMigrationReport projectMigrationReport, bool colored) | ||||
|         { | ||||
|             StringBuilder sb = new StringBuilder(); | ||||
|  |  | |||
|  | @ -39,6 +39,32 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         [Fact] | ||||
|         public void ItHasWarningWhenMigratingADeprecatedProjectJson() | ||||
|         { | ||||
|             var testProjectDirectory = TestAssets | ||||
|                .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileOptions") | ||||
|                .CreateInstance() | ||||
|                .WithSourceFiles() | ||||
|                .Root | ||||
|                .GetDirectory("project") | ||||
|                .FullName; | ||||
| 
 | ||||
|             var mockProj = ProjectRootElement.Create(); | ||||
|             var testSettings = MigrationSettings.CreateMigrationSettingsTestHook( | ||||
|                 testProjectDirectory, | ||||
|                 testProjectDirectory, | ||||
|                 mockProj); | ||||
| 
 | ||||
|             var projectMigrator = new ProjectMigrator(new FakeEmptyMigrationRule()); | ||||
|             var report = projectMigrator.Migrate(testSettings); | ||||
| 
 | ||||
|             var projectReport = report.ProjectMigrationReports.First(); | ||||
|             var warningMessage = projectReport.Warnings.First(); | ||||
|             warningMessage.Should().Contain("MIGRATE1011::Deprecated Project:"); | ||||
|             warningMessage.Should().Contain("The 'compile' option is deprecated. Use 'compile' in 'buildOptions' instead. (line: 3, file:"); | ||||
|         } | ||||
| 
 | ||||
|         [Fact] | ||||
|         public void ItHasErrorWhenMigratingADeprecatedNamedResourceOptionProjectJson() | ||||
|         { | ||||
|  |  | |||
|  | @ -72,12 +72,12 @@ namespace Microsoft.DotNet.Migration.Tests | |||
| 
 | ||||
|             new DotnetCommand() | ||||
|                  .WithWorkingDirectory(projectDirectory) | ||||
|                  .Execute("build") | ||||
|                  .Execute("build -c Debug") | ||||
|                  .Should().Pass(); | ||||
| 
 | ||||
|             new DotnetCommand() | ||||
|                  .WithWorkingDirectory(projectDirectory) | ||||
|                  .Execute("pack") | ||||
|                  .Execute("pack -c Debug") | ||||
|                  .Should().Pass(); | ||||
| 
 | ||||
|             var outputDir = projectDirectory.GetDirectory("bin", "Debug"); | ||||
|  | @ -212,12 +212,12 @@ namespace Microsoft.DotNet.Migration.Tests | |||
| 
 | ||||
|             new DotnetCommand() | ||||
|                  .WithWorkingDirectory(projectDirectory) | ||||
|                  .Execute("build") | ||||
|                  .Execute("build -c Debug") | ||||
|                  .Should().Pass(); | ||||
| 
 | ||||
|             new DotnetCommand() | ||||
|                  .WithWorkingDirectory(projectDirectory) | ||||
|                  .Execute("publish") | ||||
|                  .Execute("publish -c Debug") | ||||
|                  .Should().Pass(); | ||||
| 
 | ||||
|             var outputDir = projectDirectory.GetDirectory("bin", "Debug", "netcoreapp1.0"); | ||||
|  |  | |||
		Reference in a new issue
	
	 Justin Goshi
				Justin Goshi