浏览代码

clean split between errors and output. JSON output always valid

Victor Vieux 11 年之前
父节点
当前提交
8bce284496
共有 1 个文件被更改,包括 12 次插入9 次删除
  1. 12 9
      commands.go

+ 12 - 9
commands.go

@@ -577,11 +577,10 @@ func (cli *DockerCli) CmdInspect(args ...string) error {
 		cmd.Usage()
 		return nil
 	}
-	fmt.Fprintf(cli.out, "[")
-	for i, name := range args {
-		if i > 0 {
-			fmt.Fprintf(cli.out, ",")
-		}
+
+	indented := new(bytes.Buffer)
+
+	for _, name := range args {
 		obj, _, err := cli.call("GET", "/containers/"+name+"/json", nil)
 		if err != nil {
 			obj, _, err = cli.call("GET", "/images/"+name+"/json", nil)
@@ -591,14 +590,18 @@ func (cli *DockerCli) CmdInspect(args ...string) error {
 			}
 		}
 
-		indented := new(bytes.Buffer)
 		if err = json.Indent(indented, obj, "", "    "); err != nil {
 			fmt.Fprintf(cli.err, "%s\n", err)
 			continue
 		}
-		if _, err := io.Copy(cli.out, indented); err != nil {
-			fmt.Fprintf(cli.err, "%s\n", err)
-		}
+		indented.WriteString(",")
+	}
+	// Remove trailling ','
+	indented.Truncate(indented.Len() - 1)
+
+	fmt.Fprintf(cli.out, "[")
+	if _, err := io.Copy(cli.out, indented); err != nil {
+		fmt.Fprintf(cli.err, "%s\n", err)
 	}
 	fmt.Fprintf(cli.out, "]")
 	return nil