refactor CreateMigrationAndRunMigratorCommand.cs

pull/7802/head
Alper Ebicoglu 5 years ago
parent 37973efb45
commit 9a81666557

@ -23,60 +23,66 @@ namespace Volo.Abp.Cli.Commands
{ {
if (commandLineArgs.Target.IsNullOrEmpty()) if (commandLineArgs.Target.IsNullOrEmpty())
{ {
throw new CliUsageException( throw new CliUsageException("DbMigrations folder path is missing!");
"DbMigrations folder path is missing!"
);
} }
var dbMigratorProjectPath = GetDbMigratorProjectPath(commandLineArgs.Target); var dbMigratorProjectPath = GetDbMigratorProjectPath(commandLineArgs.Target);
if (dbMigratorProjectPath == null) if (dbMigratorProjectPath == null)
{ {
throw new Exception("DbMigrator is not found!"); throw new Exception("DbMigrator is not found!");
} }
await CheckAndInstallDotnetEfIfNeededAsync(); if (!IsDotNetEfToolInstalled())
{
InstallDotnetEfTool();
}
var output = CmdHelper.RunCmdAndGetOutput($"cd \"{commandLineArgs.Target}\" && dotnet ef migrations add Initial -s \"{dbMigratorProjectPath}\""); var addMigrationCmd = $"cd \"{commandLineArgs.Target}\" && " +
$"dotnet ef migrations add Initial -s \"{dbMigratorProjectPath}\"";
if (output.Contains("Done.") && output.Contains("To undo this action") && output.Contains("ef migrations remove")) // Migration added successfully var output = CmdHelper.RunCmdAndGetOutput(addMigrationCmd);
if (output.Contains("Done.") &&
output.Contains("To undo this action") &&
output.Contains("ef migrations remove"))
{ {
// Migration added successfully
CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(dbMigratorProjectPath) + "\" && dotnet run"); CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(dbMigratorProjectPath) + "\" && dotnet run");
await Task.CompletedTask;
} }
else else
{ {
throw new Exception("Migrations failed: " + output); var exceptionMsg = "Migrations failed! The following command didn't run successfully:" +
Environment.NewLine +
addMigrationCmd +
Environment.NewLine + output;
Logger.LogError(exceptionMsg);
throw new Exception(exceptionMsg);
} }
} }
private async Task CheckAndInstallDotnetEfIfNeededAsync() private static bool IsDotNetEfToolInstalled()
{ {
var output = CmdHelper.RunCmdAndGetOutput("dotnet tool list -g"); var output = CmdHelper.RunCmdAndGetOutput("dotnet tool list -g");
return output.Contains("dotnet-ef");
}
if (output.Contains("dotnet-ef")) private void InstallDotnetEfTool()
{ {
return;
}
Logger.LogInformation("Installing dotnet-ef tool..."); Logger.LogInformation("Installing dotnet-ef tool...");
CmdHelper.RunCmd("dotnet tool install --global dotnet-ef"); CmdHelper.RunCmd("dotnet tool install --global dotnet-ef");
Logger.LogInformation("dotnet-ef tool is installed."); Logger.LogInformation("dotnet-ef tool is installed.");
} }
private string GetDbMigratorProjectPath(string dbMigrationsFolderPath) private static string GetDbMigratorProjectPath(string dbMigrationsFolderPath)
{ {
var srcFolder = Directory.GetParent(dbMigrationsFolderPath); var srcFolder = Directory.GetParent(dbMigrationsFolderPath);
var dbMigratorDirectory = Directory.GetDirectories(srcFolder.FullName)
.FirstOrDefault(d => d.EndsWith(".DbMigrator"));
var dbMigratorFolderPath = Directory.GetDirectories(srcFolder.FullName).FirstOrDefault(d => d.EndsWith(".DbMigrator")); return dbMigratorDirectory == null
? null
if (dbMigratorFolderPath == null) : Directory.GetFiles(dbMigratorDirectory).FirstOrDefault(f => f.EndsWith(".csproj"));
{
return null;
}
return Directory.GetFiles(dbMigratorFolderPath).FirstOrDefault(f => f.EndsWith(".csproj"));
} }
public string GetUsageInfo() public string GetUsageInfo()
@ -89,4 +95,4 @@ namespace Volo.Abp.Cli.Commands
return string.Empty; return string.Empty;
} }
} }
} }
Loading…
Cancel
Save