mirror of
https://github.com/status-im/consul.git
synced 2025-01-11 14:24:39 +00:00
2b377dc624
This turns out to have a lot more subtelty than we accounted for. The test suite is especially prone to races now we can only poll the child and many extra levels of indirectoin are needed to correctly run daemon process without it becoming a Zombie. I ran this test suite in a loop with parallel enabled to verify for races (-race doesn't find any as they are logical inter-process ones not actual data races). I made it through ~50 runs before hitting an error due to timing which is much better than before. I want to go back and see if we can do better though. Just getting this up.
67 lines
1.1 KiB
Go
67 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/hashicorp/consul/command"
|
|
"github.com/hashicorp/consul/lib"
|
|
"github.com/mitchellh/cli"
|
|
)
|
|
|
|
func init() {
|
|
lib.SeedMathRand()
|
|
}
|
|
|
|
func main() {
|
|
os.Exit(realMain())
|
|
}
|
|
|
|
func realMain() int {
|
|
log.SetOutput(ioutil.Discard)
|
|
|
|
args := os.Args[1:]
|
|
for _, arg := range args {
|
|
if arg == "--" {
|
|
break
|
|
}
|
|
|
|
if arg == "-v" || arg == "--version" {
|
|
args = []string{"version"}
|
|
break
|
|
}
|
|
}
|
|
|
|
ui := &cli.BasicUi{Writer: os.Stdout, ErrorWriter: os.Stderr}
|
|
cmds := command.Map(ui)
|
|
var names []string
|
|
for c := range cmds {
|
|
names = append(names, c)
|
|
}
|
|
|
|
// Add hidden command
|
|
hidden := command.MapHidden(ui)
|
|
for name, cmd := range hidden {
|
|
// Don't add names to help since they are hidden!
|
|
cmds[name] = cmd
|
|
}
|
|
|
|
cli := &cli.CLI{
|
|
Args: args,
|
|
Commands: cmds,
|
|
Autocomplete: true,
|
|
Name: "consul",
|
|
HelpFunc: cli.FilteredHelpFunc(names, cli.BasicHelpFunc("consul")),
|
|
}
|
|
|
|
exitCode, err := cli.Run()
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "Error executing CLI: %s\n", err.Error())
|
|
return 1
|
|
}
|
|
|
|
return exitCode
|
|
}
|