浏览代码

Merge pull request #3367 from cpuguy83/3362-unify_cmd_entrypoint_handling

Use same error handling while unmarshalling args for CMD and ENTRYPOINT
Victor Vieux 11 年之前
父节点
当前提交
e5b09523dc
共有 2 个文件被更改,包括 20 次插入21 次删除
  1. 18 21
      buildfile.go
  2. 2 0
      integration/buildfile_test.go

+ 18 - 21
buildfile.go

@@ -213,16 +213,30 @@ func (b *buildFile) CmdEnv(args string) error {
 	return b.commit("", b.config.Cmd, fmt.Sprintf("ENV %s", replacedVar))
 	return b.commit("", b.config.Cmd, fmt.Sprintf("ENV %s", replacedVar))
 }
 }
 
 
-func (b *buildFile) CmdCmd(args string) error {
+func (b *buildFile) buildCmdFromJson(args string) []string {
 	var cmd []string
 	var cmd []string
 	if err := json.Unmarshal([]byte(args), &cmd); err != nil {
 	if err := json.Unmarshal([]byte(args), &cmd); err != nil {
-		utils.Debugf("Error unmarshalling: %s, setting cmd to /bin/sh -c", err)
+		utils.Debugf("Error unmarshalling: %s, setting to /bin/sh -c", err)
 		cmd = []string{"/bin/sh", "-c", args}
 		cmd = []string{"/bin/sh", "-c", args}
 	}
 	}
-	if err := b.commit("", cmd, fmt.Sprintf("CMD %v", cmd)); err != nil {
+	return cmd
+}
+
+func (b *buildFile) CmdCmd(args string) error {
+	cmd := b.buildCmdFromJson(args)
+	b.config.Cmd = cmd
+	if err := b.commit("", b.config.Cmd, fmt.Sprintf("CMD %v", cmd)); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (b *buildFile) CmdEntrypoint(args string) error {
+	entrypoint := b.buildCmdFromJson(args)
+	b.config.Entrypoint = entrypoint
+	if err := b.commit("", b.config.Cmd, fmt.Sprintf("ENTRYPOINT %v", entrypoint)); err != nil {
 		return err
 		return err
 	}
 	}
-	b.config.Cmd = cmd
 	return nil
 	return nil
 }
 }
 
 
@@ -245,23 +259,6 @@ func (b *buildFile) CmdCopy(args string) error {
 	return fmt.Errorf("COPY has been deprecated. Please use ADD instead")
 	return fmt.Errorf("COPY has been deprecated. Please use ADD instead")
 }
 }
 
 
-func (b *buildFile) CmdEntrypoint(args string) error {
-	if args == "" {
-		return fmt.Errorf("Entrypoint cannot be empty")
-	}
-
-	var entrypoint []string
-	if err := json.Unmarshal([]byte(args), &entrypoint); err != nil {
-		b.config.Entrypoint = []string{"/bin/sh", "-c", args}
-	} else {
-		b.config.Entrypoint = entrypoint
-	}
-	if err := b.commit("", b.config.Cmd, fmt.Sprintf("ENTRYPOINT %s", args)); err != nil {
-		return err
-	}
-	return nil
-}
-
 func (b *buildFile) CmdWorkdir(workdir string) error {
 func (b *buildFile) CmdWorkdir(workdir string) error {
 	b.config.WorkingDir = workdir
 	b.config.WorkingDir = workdir
 	return b.commit("", b.config.Cmd, fmt.Sprintf("WORKDIR %v", workdir))
 	return b.commit("", b.config.Cmd, fmt.Sprintf("WORKDIR %v", workdir))

+ 2 - 0
integration/buildfile_test.go

@@ -391,6 +391,8 @@ func TestBuildEntrypoint(t *testing.T) {
 	}
 	}
 
 
 	if img.Config.Entrypoint[0] != "/bin/echo" {
 	if img.Config.Entrypoint[0] != "/bin/echo" {
+		t.Log(img.Config.Entrypoint[0])
+		t.Fail()
 	}
 	}
 }
 }