Browse Source

Cleaned up argument parsing

Solomon Hykes 12 years ago
parent
commit
776705da57
1 changed files with 12 additions and 6 deletions
  1. 12 6
      dockerd/dockerd.go

+ 12 - 6
dockerd/dockerd.go

@@ -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)