Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions tests/LinkDotNet.Blog.UpgradeAssistant.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
global using System;
global using System.IO;
global using System.Threading.Tasks;
global using LinkDotNet.Blog.UpgradeAssistant;
global using LinkDotNet.Blog.UpgradeAssistant.Migrations;
global using Shouldly;
global using Xunit;
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public async Task Should_Migrate_From_11_To_12()
}
""";
await File.WriteAllTextAsync(testFile, json, TestContext.Current.CancellationToken);
var manager = new MigrationManager();
var manager = new MigrationManager([new Migration11To12()]);
var backupDir = Path.Combine(testDirectory, "backups");

// Act
Expand Down Expand Up @@ -53,7 +53,7 @@ public async Task Should_Not_Modify_Already_Migrated_File()
}
""";
await File.WriteAllTextAsync(testFile, json, TestContext.Current.CancellationToken);
var manager = new MigrationManager();
var manager = new MigrationManager([new Migration11To12()]);
var backupDir = Path.Combine(testDirectory, "backups");

// Act
Expand All @@ -76,7 +76,7 @@ public async Task Should_Skip_Version_Controlled_Appsettings_Json()
}
""";
await File.WriteAllTextAsync(testFile, json, TestContext.Current.CancellationToken);
var manager = new MigrationManager();
var manager = new MigrationManager([new Migration11To12()]);
var backupDir = Path.Combine(testDirectory, "backups");

// Act
Expand All @@ -95,7 +95,7 @@ public async Task Should_Handle_Invalid_Json()
// Arrange
var testFile = Path.Combine(testDirectory, "appsettings.Invalid.json");
await File.WriteAllTextAsync(testFile, "{ invalid json }", TestContext.Current.CancellationToken);
var manager = new MigrationManager();
var manager = new MigrationManager([new Migration11To12()]);
var backupDir = Path.Combine(testDirectory, "backups");

// Act
Expand All @@ -110,7 +110,7 @@ public async Task Should_Handle_Missing_File()
{
// Arrange
var testFile = Path.Combine(testDirectory, "nonexistent.json");
var manager = new MigrationManager();
var manager = new MigrationManager([new Migration11To12()]);
var backupDir = Path.Combine(testDirectory, "backups");

// Act
Expand All @@ -131,7 +131,7 @@ public async Task DryRun_Should_Not_Modify_File()
}
""";
await File.WriteAllTextAsync(testFile, json, TestContext.Current.CancellationToken);
var manager = new MigrationManager();
var manager = new MigrationManager([new Migration11To12()]);
var backupDir = Path.Combine(testDirectory, "backups");

// Act
Expand Down
17 changes: 17 additions & 0 deletions tools/LinkDotNet.Blog.UpgradeAssistant/MigrationDiscovery.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using LinkDotNet.Blog.UpgradeAssistant.Migrations;

namespace LinkDotNet.Blog.UpgradeAssistant;

public static class MigrationDiscovery
{
public static IReadOnlyList<IMigration> DiscoverAll()
{
return new IMigration[]
{
new Migration11To12()
}
.OrderBy(m => Version.TryParse(m.FromVersion, out var v) ? v : new Version(0, 0))
.ThenBy(m => Version.TryParse(m.ToVersion, out var v) ? v : new Version(0, 0))
.ToList();
}
}
45 changes: 16 additions & 29 deletions tools/LinkDotNet.Blog.UpgradeAssistant/MigrationManager.cs
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Nodes;
using LinkDotNet.Blog.UpgradeAssistant.Migrations;

namespace LinkDotNet.Blog.UpgradeAssistant;

public sealed class MigrationManager
{
private readonly List<IMigration> _migrations;
private readonly string _currentVersion;
private readonly List<IMigration> migrations;
private readonly string currentVersion;

public MigrationManager()
public MigrationManager(IEnumerable<IMigration> migrations)
{
_migrations = new List<IMigration>
{
new Migration11To12()
};

_currentVersion = DetermineCurrentVersionFromMigrations();
this.migrations = migrations.ToList();
currentVersion = DetermineCurrentVersionFromMigrations();
}

private string DetermineCurrentVersionFromMigrations()
{
return _migrations.Count > 0
? _migrations.Max(m => m.ToVersion) ?? "11.0"
return migrations.Count > 0
? migrations.Max(m => m.ToVersion) ?? "11.0"
: "11.0";
}

Expand Down Expand Up @@ -57,10 +52,10 @@ public async Task<bool> MigrateFileAsync(string filePath, bool dryRun, string ba
return false;
}

var currentVersion = GetVersion(document);
ConsoleOutput.WriteInfo($"Current version: {currentVersion ?? $"Not set (pre-{_currentVersion})"}");
var configVersion = GetVersion(document);
ConsoleOutput.WriteInfo($"Current version: {configVersion ?? $"Not set (pre-{this.currentVersion})"}");

var applicableMigrations = GetApplicableMigrations(currentVersion);
var applicableMigrations = GetApplicableMigrations(configVersion);

if (applicableMigrations.Count == 0)
{
Expand Down Expand Up @@ -107,7 +102,7 @@ public async Task<bool> MigrateFileAsync(string filePath, bool dryRun, string ba

if (hasAnyChanges)
{
modifiedContent = SetVersion(modifiedContent, _currentVersion);
modifiedContent = SetVersion(modifiedContent, this.currentVersion);

if (!dryRun)
{
Expand Down Expand Up @@ -143,22 +138,14 @@ private static bool IsVersionControlledAppsettingsFile(string fileName)
private List<IMigration> GetApplicableMigrations(string? currentVersion)
{
var result = new List<IMigration>();
var startVersion = currentVersion ?? "11.0";
var currentMigrationVersion = startVersion;
var foundMigration = true;
var currentMigrationVersion = currentVersion ?? "11.0";

while (foundMigration)
foreach (var migration in migrations)
{
foundMigration = false;
foreach (var migration in _migrations)
if (migration.FromVersion == currentMigrationVersion)
{
if (migration.FromVersion == currentMigrationVersion)
{
result.Add(migration);
currentMigrationVersion = migration.ToVersion;
foundMigration = true;
break;
}
result.Add(migration);
currentMigrationVersion = migration.ToVersion;
}
}

Expand Down
2 changes: 1 addition & 1 deletion tools/LinkDotNet.Blog.UpgradeAssistant/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ static async Task<int> RunWithOptions(CommandLineOptions options)
ConsoleOutput.WriteWarning("Running in DRY RUN mode - no changes will be saved.");
}

var manager = new MigrationManager();
var manager = new MigrationManager(MigrationDiscovery.DiscoverAll());
var files = GetAppsettingsFiles(targetPath);

if (files.Count == 0)
Expand Down