Something went wrong. Try again.
A database migration tool for .NET
Something went wrong. Try again.
1.9 kB · 64 lines
C#
at develop
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465using System;using System.CommandLine;using Microsoft.Extensions.Logging;using Migrato.Cli;using Migrato.Core;using Migrato.Sqlite;using Spectre.Console;
namespace Migrato.Cli.Commands;
/// <summary>/// Applies pending migrations/// </summary>internal static class UpCommand{ public static Command Build() { var command = new Command("up", "Applies pending migrations") { MigrationOptions.Dir, MigrationOptions.Db, MigrationOptions.Verbose };
command.SetAction(parseResult => { var dir = parseResult.GetValue(MigrationOptions.Dir)!; var db = parseResult.GetValue(MigrationOptions.Db)!; var verbose = parseResult.GetValue(MigrationOptions.Verbose);
try { var migrations = MigrationLoader.LoadFromDirectory(dir);
IMigrationProvider provider = new SqliteMigrationProvider(); using var connection = provider.CreateConnection(db);
using var loggerFactory = Logging.CreateFactory(verbose); var runner = new MigrationRunner(provider, loggerFactory.CreateLogger<MigrationRunner>()); var applied = runner.MigrateUp(connection, migrations);
if (applied.Count == 0) { AnsiConsole.MarkupLine("[yellow]No pending migrations.[/]"); return 0; }
foreach (var migration in applied) { AnsiConsole.MarkupLineInterpolated($"[green]Applied[/] {migration.Version}_{migration.Name}"); }
return 0; } catch (Exception ex) { AnsiConsole.MarkupLineInterpolated($"[red]Error:[/] {ex.Message}"); return 1; } });
return command; }}