Cleaned up argument parsing
This commit is contained in:
parent
95c6443c43
commit
776705da57
1 changed files with 12 additions and 6 deletions
|
@ -293,24 +293,30 @@ func (w *AutoFlush) Write(data []byte) (int, error) {
|
|||
}
|
||||
|
||||
func (docker *Docker) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
stdout := &AutoFlush{w}
|
||||
stdin := r.Body
|
||||
flags := flag.NewFlagSet("docker", flag.ContinueOnError)
|
||||
flags.SetOutput(stdout)
|
||||
flags.Usage = func() { docker.CmdHelp(stdin, stdout) }
|
||||
cmd, args := URLToCall(r.URL)
|
||||
if err := flags.Parse(append([]string{cmd}, args...)); err != nil {
|
||||
return
|
||||
}
|
||||
log.Printf("%s\n", strings.Join(append(append([]string{"docker"}, cmd), args...), " "))
|
||||
if cmd == "" {
|
||||
docker.CmdUsage(r.Body, w, "")
|
||||
return
|
||||
cmd = "help"
|
||||
}
|
||||
method := docker.getMethod(cmd)
|
||||
if method == nil {
|
||||
docker.CmdUsage(r.Body, w, cmd)
|
||||
fmt.Fprintf(stdout, "Error: no such command: %s\n", cmd)
|
||||
} else {
|
||||
err := method(r.Body, &AutoFlush{w}, args...)
|
||||
err := method(stdin, stdout, args...)
|
||||
if err != nil {
|
||||
fmt.Fprintf(w, "Error: %s\n", err)
|
||||
fmt.Fprintf(stdout, "Error: %s\n", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (docker *Docker) getMethod(name string) Cmd {
|
||||
methodName := "Cmd"+strings.ToUpper(name[:1])+strings.ToLower(name[1:])
|
||||
method, exists := reflect.TypeOf(docker).MethodByName(methodName)
|
||||
|
|
Loading…
Add table
Reference in a new issue