diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-22 17:06:26 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-22 17:06:26 +0200 |
| commit | 8b627f383e68ce2b71832d26e86f621239271ad0 (patch) | |
| tree | ff343555a378b1e093985ca5445db0a999b3f03e /internal | |
| parent | 8480d1b1b074729ebfe43cc2fcb400910880627f (diff) | |
Update main.go and cli API for signal-cancellable context (task 352/main)
main.go: set up signal.NotifyContext(SIGINT, SIGTERM) so long-running
operations (fzf, external editors) terminate gracefully on interrupts.
Call cli.New(ctx) explicitly and pass the context to c.Run(ctx, argv),
matching the task spec and allowing the context to flow through all
store/git/crypto operations.
cli: expose New(ctx) and Run(ctx, argv) as the public API; remove the
package-level Run() helper that created its own context.Background().
Verified: mage build produces ./bin/geheim; PIN=test ./bin/geheim version
prints "> geheim v0.4.0".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/cli/cli.go | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 040d58b..7d59b94 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -59,20 +59,21 @@ type CLI struct { lastResult string // most recent search result description } -// Run is the package-level entry point called by cmd/geheim/main.go. -// It creates a CLI, then either dispatches a single command from os.Args -// or enters the interactive shell loop, and returns an exit code. -func Run() int { - ctx := context.Background() +// New initialises all runtime dependencies (config, PIN, cipher, store, git, +// clipboard, shell) and returns a ready-to-use CLI. cmd/geheim/main.go calls +// New with a signal-cancellable context so that long-running operations (fzf, +// external editors) are interrupted cleanly on SIGINT/SIGTERM. +func New(ctx context.Context) (*CLI, error) { + return newCLI(ctx) +} - c, err := newCLI(ctx) - if err != nil { - fatal(err.Error()) // fatal calls os.Exit(3) and does not return - return 3 //nolint:govet // unreachable; present for compiler flow analysis - } +// Run dispatches argv (typically os.Args[1:]) to the appropriate handler or +// enters the interactive shell loop. Returns an exit code suitable for +// os.Exit. The caller is responsible for calling sh.Close() when done; +// cmd/geheim/main.go does this via defer. +func (c *CLI) Run(ctx context.Context, argv []string) int { defer c.sh.Close() - - return c.run(ctx, os.Args[1:]) + return c.run(ctx, argv) } // newCLI initialises all dependencies: config, PIN, cipher, store, git, |
