Address PR comments

This commit is contained in:
Justin Goshi 2017-01-26 12:53:29 -08:00
parent 037da3fc01
commit 3821d39d6c
5 changed files with 88 additions and 31 deletions

View file

@ -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;
@ -973,21 +988,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)
{

View file

@ -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);

View file

@ -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();

View file

@ -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()
{

View file

@ -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");