diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2019-04-18 05:23:43 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-18 05:23:43 -0700 |
commit | 5260d33f95c652053c7c17b18fa843915dc22322 (patch) | |
tree | 3971a17971bd4acc842de0b776843d34a8e1e7fc /libpod | |
parent | 8b027dee48c6ac738bd1a2ac2b0f0a3f60e82945 (diff) | |
parent | 6b3d4abb07bd15f6ca2c2f1dc007c325b9cc0dc4 (diff) | |
download | podman-5260d33f95c652053c7c17b18fa843915dc22322.tar.gz podman-5260d33f95c652053c7c17b18fa843915dc22322.tar.bz2 podman-5260d33f95c652053c7c17b18fa843915dc22322.zip |
Merge pull request #2952 from rhatdan/change
Fix podman command --change CMD
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/container_commit.go | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/libpod/container_commit.go b/libpod/container_commit.go index 3cc4b2c92..ae04f67bb 100644 --- a/libpod/container_commit.go +++ b/libpod/container_commit.go @@ -125,23 +125,48 @@ func (c *Container) Commit(ctx context.Context, destImage string, options Contai // Workdir importBuilder.SetWorkDir(c.Spec().Process.Cwd) + genCmd := func(cmd string) []string { + trim := func(cmd []string) []string { + if len(cmd) == 0 { + return cmd + } + + retCmd := []string{} + for _, c := range cmd { + if len(c) >= 2 { + if c[0] == '"' && c[len(c)-1] == '"' { + retCmd = append(retCmd, c[1:len(c)-1]) + continue + } + } + retCmd = append(retCmd, c) + } + return retCmd + } + if strings.HasPrefix(cmd, "[") { + cmd = strings.TrimPrefix(cmd, "[") + cmd = strings.TrimSuffix(cmd, "]") + return trim(strings.Split(cmd, ",")) + } + return []string{"/bin/sh", "-c", cmd} + } // Process user changes for _, change := range options.Changes { - splitChange := strings.SplitN(change, " ", 2) + splitChange := strings.SplitN(change, "=", 2) if len(splitChange) != 2 { - splitChange = strings.SplitN(change, "=", 2) + splitChange = strings.SplitN(change, " ", 2) if len(splitChange) < 2 { return nil, errors.Errorf("invalid change %s format", change) } } - change := strings.Split(splitChange[1], " ") switch strings.ToUpper(splitChange[0]) { case "CMD": - importBuilder.SetCmd(change) + importBuilder.SetCmd(genCmd(splitChange[1])) case "ENTRYPOINT": - importBuilder.SetEntrypoint(change) + importBuilder.SetEntrypoint(genCmd(splitChange[1])) case "ENV": + change := strings.Split(splitChange[1], " ") name := change[0] val := "" if len(change) < 2 { @@ -168,6 +193,7 @@ func (c *Container) Commit(ctx context.Context, destImage string, options Contai } importBuilder.SetPort(splitChange[1]) case "LABEL": + change := strings.Split(splitChange[1], " ") if len(change) < 2 { change = strings.Split(change[0], "=") } |