log.Fatal and more consistent error strings

This commit is contained in:
bth 2026-01-19 09:17:49 -08:00
commit c00904a004
6 changed files with 31 additions and 28 deletions

View file

@ -2,6 +2,7 @@ package flags
import ( import (
"fmt" "fmt"
"log"
"os" "os"
"reflect" "reflect"
"strings" "strings"
@ -59,8 +60,8 @@ func MissingValue(args []string, i int) bool {
// if no value ahead in the args, print error and exit // if no value ahead in the args, print error and exit
func ValidValueOrExit(args []string, i int) { func ValidValueOrExit(args []string, i int) {
if MissingValue(args, i) { if MissingValue(args, i) {
fmt.Printf("%s needs a value assignment\n", args[i]) log.Printf("um: %s needs a value assignment\n", args[i])
os.Exit(1) log.Fatal("try: um [cmd] --help")
} }
} }
@ -92,7 +93,7 @@ func Help(subcmd string, opts any) {
) )
} }
} }
fmt.Printf("um %s%s\n", subcmd, positional) log.Printf("um %s%s\n", subcmd, positional)
w.Flush() w.Flush()
os.Exit(0) os.Exit(0)
} }

View file

@ -3,8 +3,7 @@ package next
import ( import (
"bytes" "bytes"
"errors" "errors"
"fmt" "log"
"os"
"os/exec" "os/exec"
"regexp" "regexp"
"strings" "strings"
@ -14,7 +13,8 @@ const (
// NOTE: the -r flag: // NOTE: the -r flag:
LS_CMD = `ls -r [0-9]*.md` LS_CMD = `ls -r [0-9]*.md`
// we only care about the number group: // we only care about the number group:
FILE_REGEXP = `(?m)^([0-9]+)\.[[:alpha:]]*\.*md$` FILE_REGEXP = `(?m)^([0-9]+)\.[[:alpha:]]*\.*md$`
NOT_FOUND_MSG = "um files not found"
) )
var fileRegexp *regexp.Regexp = regexp.MustCompile(FILE_REGEXP) var fileRegexp *regexp.Regexp = regexp.MustCompile(FILE_REGEXP)
@ -35,7 +35,7 @@ func last() (string, error) {
lines := strings.Split(stdout.String(), "\n") lines := strings.Split(stdout.String(), "\n")
if len(lines) == 0 { if len(lines) == 0 {
return "", errors.New("um files not found") return "", errors.New(NOT_FOUND_MSG)
} }
return lines[0], nil return lines[0], nil
} }
@ -43,8 +43,7 @@ func last() (string, error) {
func Last() { func Last() {
s, err := last() s, err := last()
if err != nil { if err != nil {
fmt.Printf("um last: %v", err) log.Fatalf("um last: %v", err)
os.Exit(1)
} }
fmt.Println(s) log.Println(s)
} }

View file

@ -3,6 +3,7 @@ package next
import ( import (
"errors" "errors"
"fmt" "fmt"
"log"
"os/exec" "os/exec"
"strconv" "strconv"
@ -32,7 +33,7 @@ func parseArgs(args []string) options {
case i == 1 && !flags.HasDashPrefix(arg): case i == 1 && !flags.HasDashPrefix(arg):
opts.Tags.Val = arg opts.Tags.Val = arg
case i >= 2: case i >= 2:
fmt.Println("um next : too many args") log.Println("um next: too many args")
flags.Help("next", opts) flags.Help("next", opts)
case arg == opts.Help.Long || arg == opts.Help.Short: case arg == opts.Help.Long || arg == opts.Help.Short:
flags.Help("next", opts) flags.Help("next", opts)
@ -47,7 +48,7 @@ func numFromLast(last string) (string, error) {
res := fileRegexp.FindStringSubmatch(last) res := fileRegexp.FindStringSubmatch(last)
num := "" num := ""
if len(res) < 2 { if len(res) < 2 {
return num, errors.New("no um files in current dir") return num, errors.New(NOT_FOUND_MSG)
} }
num = res[1] num = res[1]
return num, nil return num, nil
@ -92,11 +93,11 @@ func emacsNext(f string, tags string) error {
quotedargs = fmt.Sprintf(`%s "%s"`, quotedargs, tags) quotedargs = fmt.Sprintf(`%s "%s"`, quotedargs, tags)
} }
fn := fmt.Sprintf(`(um-next %s)`, quotedargs) fn := fmt.Sprintf(`(um-next %s)`, quotedargs)
out, err := exec.Command("emacsclient", "--eval", fn).Output() out, err := exec.Command("emacsclient", "--eval", fn).CombinedOutput()
if err != nil { if err != nil {
return err return err
} }
fmt.Println(string(out)) log.Print(string(out))
return nil return nil
} }
@ -104,13 +105,13 @@ func Next(args []string) {
opts := parseArgs(args) opts := parseArgs(args)
l, err := last() l, err := last()
if err != nil { if err != nil {
fmt.Printf("err: %v\n", err) log.Fatalf("um next: %v", err)
} }
filename, err := next(l, opts.Descriptor.Val) filename, err := next(l, opts.Descriptor.Val)
if err != nil { if err != nil {
fmt.Printf("err: %v\n", err) log.Fatalf("um next: %v", err)
} }
if err := emacsNext(filename, opts.Tags.Val); err != nil { if err := emacsNext(filename, opts.Tags.Val); err != nil {
fmt.Printf("err: %v\n", err) log.Fatalf("um next: %v", err)
} }
} }

View file

@ -1,7 +1,7 @@
package sort package sort
import ( import (
"fmt" "log"
"github.com/brtholomy/um/go/flags" "github.com/brtholomy/um/go/flags"
) )
@ -33,7 +33,7 @@ func parseArgs(args []string) options {
case arg == opts.Help.Long || arg == opts.Help.Short: case arg == opts.Help.Long || arg == opts.Help.Short:
flags.Help("sort", opts) flags.Help("sort", opts)
default: default:
fmt.Println("invalid argument") log.Println("um sort: invalid argument")
flags.Help("sort", opts) flags.Help("sort", opts)
} }
} }
@ -42,5 +42,5 @@ func parseArgs(args []string) options {
func Sort(args []string) { func Sort(args []string) {
opts := parseArgs(args) opts := parseArgs(args)
fmt.Println(opts) log.Println(opts)
} }

View file

@ -1,7 +1,7 @@
package tag package tag
import ( import (
"fmt" "log"
"github.com/brtholomy/um/go/flags" "github.com/brtholomy/um/go/flags"
) )
@ -37,7 +37,7 @@ func parseArgs(args []string) options {
case arg == opts.Help.Long || arg == opts.Help.Short: case arg == opts.Help.Long || arg == opts.Help.Short:
flags.Help("tag", opts) flags.Help("tag", opts)
default: default:
fmt.Println("invalid argument") log.Println("um tag: invalid argument")
flags.Help("tag", opts) flags.Help("tag", opts)
} }
} }
@ -46,5 +46,5 @@ func parseArgs(args []string) options {
func Tag(args []string) { func Tag(args []string) {
opts := parseArgs(args) opts := parseArgs(args)
fmt.Println(opts) log.Println(opts)
} }

12
um.go
View file

@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"log"
"os" "os"
nextpkg "github.com/brtholomy/um/go/next" nextpkg "github.com/brtholomy/um/go/next"
@ -21,11 +22,13 @@ const (
var help string = fmt.Sprintf("um [%s | %s | %s | %s] [--help | -h]", tag, next, last, sort) var help string = fmt.Sprintf("um [%s | %s | %s | %s] [--help | -h]", tag, next, last, sort)
func main() { func main() {
// NOTE: no prefix at all so that I can use log.Fatalf
log.SetFlags(0)
// TODO: do something useful: // TODO: do something useful:
// run empty tag query? // run empty tag query?
if len(os.Args) < 2 { if len(os.Args) < 2 {
fmt.Println(help) log.Fatalln(help)
os.Exit(1)
} }
cmd := Subcommand(os.Args[1]) cmd := Subcommand(os.Args[1])
@ -41,8 +44,7 @@ func main() {
case sort: case sort:
sortpkg.Sort(args) sortpkg.Sort(args)
default: default:
fmt.Println("command not found") log.Println("um: command not found")
fmt.Println(help) log.Fatalln(help)
os.Exit(1)
} }
} }