From 2c41acab4c97f584e8e199b31dc456194b8d7e6c Mon Sep 17 00:00:00 2001 From: tsne Date: Mon, 6 Jul 2026 16:52:20 +0200 Subject: initial --- cmd/hopper/main.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 cmd/hopper/main.go (limited to 'cmd') diff --git a/cmd/hopper/main.go b/cmd/hopper/main.go new file mode 100644 index 0000000..cc58d0d --- /dev/null +++ b/cmd/hopper/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "context" + "os" + "os/signal" + "strconv" + "sync/atomic" + "syscall" + + "tsne.dev/hopper/internal/cli" + "tsne.dev/hopper/internal/log" +) + +func main() { + log.Init(os.Stdout, os.Stderr) + + sigch := make(chan os.Signal, 1) + signal.Notify(sigch, syscall.SIGINT, syscall.SIGTERM) + + ctx, cancel := context.WithCancelCause(context.Background()) + defer cancel(nil) + + var receivedSignal int64 + go func() { + sig := (<-sigch).(syscall.Signal) + atomic.StoreInt64(&receivedSignal, int64(sig)) + + var signame string + switch sig { + case syscall.SIGINT: + signame = "SIGINT" + case syscall.SIGTERM: + signame = "SIGTERM" + default: + signame = "signal " + strconv.Itoa(int(sig)) + } + + log.Print("received %s", signame) + cancel(cli.CancellationError("operation aborted (" + signame + ")")) + }() + + code := cli.Run(ctx, os.Args[1:]) + if sig := atomic.LoadInt64(&receivedSignal); sig != 0 { + code = 128 + int(sig) + } + os.Exit(code) +} -- cgit v1.3