66 "io"
77 "log"
88 "os"
9+ "os/signal"
910 "strings"
11+ "syscall"
1012 "time"
1113
1214 "github.com/charmbracelet/bubbletea"
@@ -18,7 +20,15 @@ import (
1820 "github.com/turkprogrammer/logt/internal/ui"
1921)
2022
21- var version = "0.5.0"
23+ // version устанавливается при сборке через -ldflags "-X main.version=..."
24+ var version = "dev"
25+
26+ // Коды выхода (Unix convention).
27+ const (
28+ exitOK = 0
29+ exitRuntime = 1
30+ exitUsage = 2
31+ )
2232
2333func main () {
2434 // Обработка subcommands (должно быть до парсинга flags)
@@ -57,8 +67,8 @@ func showVersion(cfg *config.Config) {
5767}
5868
5969func runWithPaths (paths []string , cfg * config.Config ) {
60- ctx , cancel := context . WithCancel (context .Background ())
61- defer cancel ()
70+ ctx , stop := signal . NotifyContext (context .Background (), os . Interrupt , syscall . SIGTERM )
71+ defer stop ()
6272
6373 var fileProvider provider.Provider
6474 mp := provider .NewMultiProvider ()
@@ -74,26 +84,29 @@ func runWithPaths(paths []string, cfg *config.Config) {
7484
7585 expandedPaths := provider .ExpandPaths (paths )
7686 if len (expandedPaths ) == 0 {
77- log .Fatalf ("No files found matching: %v" , paths )
87+ fmt .Fprintf (os .Stderr , "No files found matching: %v\n " , paths )
88+ os .Exit (exitUsage )
7889 }
7990
8091 if err := fileProvider .Watch (ctx , expandedPaths ); err != nil {
81- log .Fatalf ("Failed to watch files: %v" , err )
92+ fmt .Fprintf (os .Stderr , "Failed to watch files: %v\n " , err )
93+ os .Exit (exitRuntime )
8294 }
8395
8496 run (ctx , mp , cfg )
8597}
8698
8799func runStdin (cfg * config.Config ) {
88- ctx , cancel := context . WithCancel (context .Background ())
89- defer cancel ()
100+ ctx , stop := signal . NotifyContext (context .Background (), os . Interrupt , syscall . SIGTERM )
101+ defer stop ()
90102
91103 stdinProvider := provider .NewStdinProvider ()
92104 mp := provider .NewMultiProvider ()
93105 mp .AddProvider (stdinProvider )
94106
95107 if err := stdinProvider .Start (ctx ); err != nil {
96- log .Fatalf ("Failed to start stdin provider: %v" , err )
108+ fmt .Fprintf (os .Stderr , "Failed to start stdin provider: %v\n " , err )
109+ os .Exit (exitRuntime )
97110 }
98111
99112 run (ctx , mp , cfg )
@@ -145,7 +158,8 @@ func run(ctx context.Context, mp *provider.MultiProvider, cfg *config.Config) {
145158 )
146159
147160 if _ , err := p .Run (); err != nil {
148- log .Fatalf ("Failed to run UI: %v" , err )
161+ fmt .Fprintf (os .Stderr , "Failed to run UI: %v\n " , err )
162+ os .Exit (exitRuntime )
149163 }
150164}
151165
0 commit comments