From 667bf24a8ac2c2b4c4f9befd7f77b22f0a156a27 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 18 Apr 2026 16:22:05 +0300 Subject: refactor: extract migration logic into internal/migrate package (task q6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move all geheim→KeePass migration business logic from internal/cli/migrate_kdbx.go into a new internal/migrate package (migrator.go, kdbx_store.go). The CLI layer is now a thin orchestrator: parse flags, open KDBX, call migrate.Run, save, report. Key design decisions: - migrate.Run accepts separate logFn (stdout info) and warnFn (stderr errors) so per-entry errors correctly route to stderr via warn(), not stdout via logMsg() - migrate.Options contains only DryRun; DBPath/BinaryOutDir removed (CLI-only concerns) - StoreWalker interface is narrow, avoiding a direct dependency on backend.Backend - cli_paths.go extracts readPasswordFile/resolveHomeDir/expandHome shared within cli - kdbx_store.go deleted from cli (moved to internal/migrate) - Duplicate TestExtractPasswordFromContent removed from kdbx_store_test.go - Custom contains/containsStr helpers replaced with strings.Contains in tests - Dry-run test now asserts logged message content Co-Authored-By: Claude Sonnet 4.6 --- internal/cli/cli.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'internal/cli/cli.go') diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 01342be..674d120 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -9,7 +9,8 @@ // - cli_backend.go — backend factory (buildBackend, buildGeheimBackend, buildKeepassBackend, ...) // - cli_dispatch.go — shell loop (shellLoop) and command dispatcher (dispatch, dispatchSimple, dispatchSearch) // - cli_commands.go — concrete command handlers (cmdAdd, cmdImport, …) and action-function factories -// - migrate_kdbx.go — migrate-kdbx command and its helpers +// - cli_paths.go — shared path utilities (readPasswordFile, resolveHomeDir, expandHome) +// - migrate_kdbx.go — thin CLI handler for migrate-kdbx; delegates logic to internal/migrate package cli import ( @@ -22,6 +23,7 @@ import ( "codeberg.org/snonux/foostore/internal/backend" "codeberg.org/snonux/foostore/internal/clipboard" "codeberg.org/snonux/foostore/internal/config" + "codeberg.org/snonux/foostore/internal/migrate" "codeberg.org/snonux/foostore/internal/shell" "codeberg.org/snonux/foostore/internal/store" ) @@ -73,7 +75,7 @@ type CLI struct { g Gitter // real *git.Git or *git.NoOp when kdbx is outside a repo clip *clipboard.Clipboard sh *shell.Shell - openKDBX func(string, string) (KDBXStore, error) + openKDBX func(string, string) (migrate.KDBXStore, error) now func() time.Time lastResult string // most recent search result description effectiveBackend string // resolved backend: --backend flag > cfg.Backend > "geheim" @@ -133,7 +135,7 @@ func newCLI(ctx context.Context, backendName, kdbxPath string) (*CLI, error) { st: st, g: g, clip: clip, - openKDBX: OpenKDBXStore, + openKDBX: migrate.OpenKDBXStore, now: time.Now, effectiveBackend: effectiveBackend, } -- cgit v1.2.3