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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue