ZOSYO3IBH5SCB27UP642O2SGCWQ7ZTQJSZ3PXKZVFQP72S34U3IQC // Bindings help (wrap at 80 chars)
m.renderHeader(&b)m.renderProgressBar(&b, current, total)m.renderSegmentInfo(&b, df, seg)m.renderLabels(&b, seg)// Clip dialog (when active)if m.clipMode {m.renderClipDialog(&b)return tea.NewView(b.String())}// Comment dialog (when active)if m.commentMode {m.renderCommentDialog(&b)return tea.NewView(b.String())}// Errorif m.err != "" {b.WriteString(errorStyle.Render(m.err))}v := tea.NewView(b.String())v.AltScreen = truereturn v}// renderHeader renders the keybindings help textfunc (m Model) renderHeader(b *strings.Builder) {
// Clip dialog (when active)if m.clipMode {m.renderClipDialog(&b)return tea.NewView(b.String())}// Comment dialog (when active)if m.commentMode {m.renderCommentDialog(&b)return tea.NewView(b.String())}// Errorif m.err != "" {b.WriteString(errorStyle.Render(m.err))}v := tea.NewView(b.String())v.AltScreen = truereturn v
// commandDispatch maps command names to their handler functions.var commandDispatch = map[string]func([]string) error{"import": cmd.RunImport,"sql": cmd.RunSQL,"create": cmd.RunCreate,"update": cmd.RunUpdate,"export": cmd.RunExport,"replay": cmd.RunReplay,"calls": cmd.RunCalls,"xxhash": cmd.RunXXHash,"metadata": cmd.RunMetadata,"time": cmd.RunTime,"isnight": cmd.RunIsNight,"prepend": cmd.RunPrepend,}
switch os.Args[1] {case "import":cmd.RunImport(os.Args[2:])case "sql":cmd.RunSQL(os.Args[2:])case "create":cmd.RunCreate(os.Args[2:])case "update":cmd.RunUpdate(os.Args[2:])case "export":cmd.RunExport(os.Args[2:])case "replay":cmd.RunReplay(os.Args[2:])case "calls":cmd.RunCalls(os.Args[2:])case "xxhash":cmd.RunXXHash(os.Args[2:])case "metadata":cmd.RunMetadata(os.Args[2:])case "time":cmd.RunTime(os.Args[2:])case "isnight":cmd.RunIsNight(os.Args[2:])case "prepend":cmd.RunPrepend(os.Args[2:])default:
handler, ok := commandDispatch[os.Args[1]]if !ok {
// Validate required flagsrequireFlags(fs, "--db", *dbPath, "--dataset", *datasetID, "--name", *name, "--lat", *lat, "--lon", *lon, "--timezone", *tz)
if err := checkFlags(fs, "--db", *dbPath, "--dataset", *datasetID, "--name", *name, "--lat", *lat, "--lon", *lon, "--timezone", *tz); err != nil {return err}
// Validate required flagsrequireFlags(fs, "--db", *dbPath, "--id", *datasetID, "--output", *output)
if err := checkFlags(fs, "--db", *dbPath, "--id", *datasetID, "--output", *output); err != nil {return err}
// requireFlags checks that the given flag values are non-empty strings.// If any are empty, prints an error and exits with usage.// Each pair is (flagName, flagValue) — e.g. requireFlags(fs, "--db", *dbPath, "--id", *id)func requireFlags(fs *flag.FlagSet, pairs ...string) {
// checkFlags checks that the given flag values are non-empty strings.// Returns an error if any are empty (does not call os.Exit).// Each pair is (flagName, flagValue) — e.g. checkFlags(fs, "--db", *dbPath, "--id", *id)func checkFlags(fs *flag.FlagSet, pairs ...string) error {
// requireNonZeroFlags checks that the given int flag values are non-zero.// Each pair is (flagName, flagValue) — e.g. requireNonZeroFlags(fs, "--record", *record)func requireNonZeroFlags(fs *flag.FlagSet, pairs ...struct {
// checkNonZeroFlags checks that the given int flag values are non-zero.// Returns an error if any are zero (does not call os.Exit).func checkNonZeroFlags(fs *flag.FlagSet, pairs ...struct {
}}if len(missing) > 0 {fs.Usage()return fmt.Errorf("missing required flags: %v", missing)}return nil}// requireFlags checks that the given flag values are non-empty strings.// If any are empty, prints usage and exits.// Each pair is (flagName, flagValue) — e.g. requireFlags(fs, "--db", *dbPath, "--id", *id)func requireFlags(fs *flag.FlagSet, pairs ...string) {var missing []stringfor i := 0; i < len(pairs); i += 2 {if pairs[i+1] == "" {missing = append(missing, pairs[i])
// Validate required flagsrequireFlags(fs, "--db", *dbPath, "--dataset", *datasetID, "--location", *locationID, "--name", *name, "--sample-rate", *sampleRate)
if err := checkFlags(fs, "--db", *dbPath, "--dataset", *datasetID, "--location", *locationID, "--name", *name, "--sample-rate", *sampleRate); err != nil {return err}
Converted core Run* functions to return `error` instead of calling `os.Exit`:- All CRUD commands (create/update dataset/location/cluster/pattern)- sql, export, replay, xxhash, metadata, isnight, prepend, time- Top-level dispatchers: RunImport, RunCalls, RunCreate, RunUpdate, RunExport, RunReplaymain.go now uses a `commandDispatch` map and has a single error-handlingexit point. Reduced main() complexity from 15 to ~4.Calls_* subcommand functions and import.go internal functions still useos.Exit internally — to be converted in a follow-up pass.