92 lines
1.5 KiB
Go
92 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
executeMu sync.Mutex
|
|
commandStdout io.Writer = os.Stdout
|
|
commandStderr io.Writer = os.Stderr
|
|
)
|
|
|
|
func Execute(args []string, stdout, stderr io.Writer) int {
|
|
executeMu.Lock()
|
|
defer executeMu.Unlock()
|
|
|
|
prevStdout := commandStdout
|
|
prevStderr := commandStderr
|
|
commandStdout = stdout
|
|
commandStderr = stderr
|
|
defer func() {
|
|
commandStdout = prevStdout
|
|
commandStderr = prevStderr
|
|
}()
|
|
|
|
if len(args) < 1 {
|
|
usage()
|
|
return 2
|
|
}
|
|
if args[0] == "help" {
|
|
if len(args) == 1 {
|
|
usage()
|
|
return 0
|
|
}
|
|
if err := runCommand([]string{args[1], "--help"}); err != nil {
|
|
_, _ = fmt.Fprintln(commandStderr, err)
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
if isHelpToken(args[0]) {
|
|
usage()
|
|
return 0
|
|
}
|
|
|
|
if err := runCommand(args); err != nil {
|
|
_, _ = fmt.Fprintln(commandStderr, err)
|
|
return 1
|
|
}
|
|
|
|
return 0
|
|
}
|
|
|
|
func isHelpToken(value string) bool {
|
|
switch strings.TrimSpace(value) {
|
|
case "-h", "--help":
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func runCommand(args []string) error {
|
|
switch args[0] {
|
|
case "init":
|
|
return runInit(args[1:])
|
|
case "add":
|
|
return runAdd(args[1:])
|
|
case "ingest":
|
|
return runIngest(args[1:])
|
|
case "search":
|
|
return runSearch(args[1:])
|
|
case "list":
|
|
return runList(args[1:])
|
|
case "events":
|
|
return runEvents(args[1:])
|
|
case "link":
|
|
return runLink(args[1:])
|
|
case "verify":
|
|
return runVerify(args[1:])
|
|
case "repos":
|
|
return runRepos(args[1:])
|
|
default:
|
|
usage()
|
|
return fmt.Errorf("unknown command %s", args[0])
|
|
}
|
|
}
|