CLI: Properly parse cli flags for subcommands

Previously we parsed cli flags globally instead of per subcommand, which was weird.
This commit is contained in:
lawl 2021-04-05 10:16:40 +02:00
parent 54697be895
commit 8477ba5bfe
2 changed files with 27 additions and 18 deletions

View File

@ -39,7 +39,7 @@ Add this to .bashrc
```
if [ -n "$PS1" ] ; then
PROMPT_COMMAND='hs9001 -ret $? add "$(history 1)"'
PROMPT_COMMAND='hs9001 add -ret $? "$(history 1)"'
fi
```
By default, every system user gets his own database. You can override this by setting the environment variable

43
main.go
View File

@ -124,54 +124,63 @@ func printUsage() {
}
func main() {
var ret int
flag.IntVar(&ret, "ret", 0, "Return value of the command to add")
flag.Parse()
args := flag.Args()
argslen := len(args)
addCmd := flag.NewFlagSet("add", flag.ExitOnError)
searchCmd := flag.NewFlagSet("search", flag.ExitOnError)
if argslen < 1 {
if len(os.Args) < 1 {
printUsage()
return
}
cmd := args[0]
cmd := os.Args[1]
globalargs := os.Args[2:]
conn := createConnection()
if cmd == "add" {
switch cmd {
case "add":
var ret int
addCmd.IntVar(&ret, "ret", 0, "Return value of the command to add")
addCmd.Parse(globalargs)
args := addCmd.Args()
if ret == 23 { // 23 is our secret do not log status code
return
}
if argslen < 2 {
if len(args) < 1 {
fmt.Fprint(os.Stderr, "Error: You need to provide the command to be added")
}
historycmd := args[1]
historycmd := args[0]
var rgx = regexp.MustCompile("\\s+\\d+\\s+(.*)")
rs := rgx.FindStringSubmatch(historycmd)
if len(rs) == 2 {
add(conn, rs[1])
}
} else if cmd == "search" {
if argslen < 2 {
case "search":
searchCmd.Parse(globalargs)
args := searchCmd.Args()
if len(args) < 1 {
fmt.Fprint(os.Stderr, "Please provide the search query\n")
os.Exit(1)
}
q := strings.Join(args[1:], " ")
q := strings.Join(args, " ")
search(conn, q)
os.Exit(23)
} else if cmd == "init" {
case "init":
err := os.MkdirAll(filepath.Dir(databaseLocation()), 0755)
if err != nil {
log.Panic(err)
}
initDatabase(conn)
} else if cmd == "import" {
case "import":
importFromStdin(conn)
} else {
fmt.Fprint(os.Stderr, "Error: Unknown command supplied\n\n")
default:
fmt.Fprintf(os.Stderr, "Error: Unknown subcommand '%s' supplied\n\n", cmd)
printUsage()
return
}
}