shell-history/main.go

78 lines
1.5 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"git.meatbag.se/vlv/shell-history/internal/add"
"git.meatbag.se/vlv/shell-history/internal/db"
"git.meatbag.se/vlv/shell-history/internal/importer"
"git.meatbag.se/vlv/shell-history/internal/search"
"git.meatbag.se/vlv/shell-history/internal/stats"
"git.meatbag.se/vlv/shell-history/internal/sync"
)
func main() {
global := flag.NewFlagSet("shist", flag.ExitOnError)
dbPath := global.String("db", defaultDBPath(), "path to database")
global.Usage = usage
global.Parse(os.Args[1:])
args := global.Args()
if len(args) < 1 {
usage()
}
cmd := args[0]
rest := args[1:]
d, err := db.Open(*dbPath)
if err != nil {
fmt.Fprintf(os.Stderr, "shist: %v\n", err)
os.Exit(1)
}
defer d.Close()
switch cmd {
case "add":
err = add.Run(d, rest)
case "search":
err = search.Run(d, rest)
case "sync":
err = sync.Run(d, rest)
case "import":
err = importer.Run(d, rest)
case "stats":
err = stats.Run(d)
default:
usage()
}
if err != nil {
fmt.Fprintf(os.Stderr, "shist %s: %v\n", cmd, err)
os.Exit(1)
}
}
func defaultDBPath() string {
home, err := os.UserHomeDir()
if err != nil {
return "history.db"
}
return filepath.Join(home, ".local", "share", "shist", "history.db")
}
func usage() {
fmt.Fprintln(os.Stderr, `usage: shist [--db PATH] <command> [flags]
commands:
add record a command
search search history
sync export, git sync, import
import one-time import from log files
stats show statistics`)
os.Exit(1)
}