浏览代码

only os.Exits on error

Victor Vieux 11 年之前
父节点
当前提交
46a1cd69a9
共有 3 个文件被更改,包括 15 次插入1 次删除
  1. 3 1
      commands.go
  2. 3 0
      docker/docker.go
  3. 9 0
      utils/utils.go

+ 3 - 1
commands.go

@@ -1479,7 +1479,9 @@ func (cli *DockerCli) CmdRun(args ...string) error {
 		if err != nil {
 			return err
 		}
-		os.Exit(status)
+		if status != 0 {
+			return &utils.StatusError{status}
+		}
 	}
 
 	return nil

+ 3 - 0
docker/docker.go

@@ -75,6 +75,9 @@ func main() {
 		}
 		protoAddrParts := strings.SplitN(flHosts[0], "://", 2)
 		if err := docker.ParseCommands(protoAddrParts[0], protoAddrParts[1], flag.Args()...); err != nil {
+			if sterr, ok := err.(*utils.StatusError); ok {
+				os.Exit(sterr.Status)
+			}
 			log.Fatal(err)
 			os.Exit(-1)
 		}

+ 9 - 0
utils/utils.go

@@ -1012,3 +1012,12 @@ func (graph *DependencyGraph) GenerateTraversalMap() ([][]string, error) {
 	}
 	return result, nil
 }
+
+// An StatusError reports an unsuccessful exit by a command.
+type StatusError struct {
+	Status int
+}
+
+func (e *StatusError) Error() string {
+	return fmt.Sprintf("Status: %d", e.Status)
+}