78 lines
1.5 KiB
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("verbatim", 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, "verbatim: %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, "verbatim %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", "verbatim", "history.db")
|
|
}
|
|
|
|
func usage() {
|
|
fmt.Fprintln(os.Stderr, `usage: verbatim [--db PATH] <command> [flags]
|
|
|
|
commands:
|
|
add record a command
|
|
search search history
|
|
sync export, git sync, import (remembers DIR)
|
|
import one-time import from log files
|
|
stats show statistics`)
|
|
os.Exit(1)
|
|
}
|