feat(installer): record data directory in install manifest

Write the resolved DbPath parent into the manifest so UninstallRunner
can honour customised data locations instead of always assuming
~/.todo-app. Older manifests fall back to the default path.
This commit is contained in:
mika kuns
2026-04-23 13:07:23 +02:00
parent 31218fc205
commit 2690332d13
3 changed files with 12 additions and 4 deletions

View File

@@ -8,7 +8,8 @@ public sealed record InstallManifest(
string Version,
string InstallDir,
string WorkerDir,
DateTimeOffset InstalledAt);
DateTimeOffset InstalledAt,
string? DataDir = null);
public static class InstallManifestStore
{

View File

@@ -67,10 +67,13 @@ public sealed class UninstallRunner
failures.Add($"install dir ({_context.InstallDirectory}): {err}");
}
// 6) Delete ~/.todo-app (config + DB + logs) — only if user opted in.
// 6) Delete data dir (config + DB + logs) — only if user opted in.
// Prefer the manifest-recorded DataDir so a customised DbPath is honoured;
// fall back to the default ~/.todo-app for older manifests.
if (removeAppData)
{
var appData = Paths.AppDataRoot();
var manifest = InstallManifestStore.TryRead(_context.InstallDirectory);
var appData = manifest?.DataDir ?? Paths.AppDataRoot();
if (Directory.Exists(appData))
{
progress.Report($"Deleting {appData}...");

View File

@@ -1,4 +1,5 @@
using System.IO;
using ClaudeDo.Data;
using ClaudeDo.Installer.Core;
namespace ClaudeDo.Installer.Steps;
@@ -14,11 +15,14 @@ public sealed class WriteInstallManifestStep : IInstallStep
try
{
var dataDir = Path.GetDirectoryName(Paths.Expand(ctx.DbPath));
var manifest = new InstallManifest(
Version: ctx.InstalledVersion,
InstallDir: ctx.InstallDirectory,
WorkerDir: Path.Combine(ctx.InstallDirectory, "worker"),
InstalledAt: DateTimeOffset.UtcNow);
InstalledAt: DateTimeOffset.UtcNow,
DataDir: dataDir);
InstallManifestStore.Write(ctx.InstallDirectory, manifest);
progress.Report($"Wrote {InstallManifestStore.ManifestPath(ctx.InstallDirectory)}");