mirror of https://github.com/containers/podman.git
35 lines
1.2 KiB
Go
35 lines
1.2 KiB
Go
package handlers
|
|
|
|
import (
|
|
"strings"
|
|
"unicode"
|
|
)
|
|
|
|
// DecodeChanges reads one or more changes from a slice and cleans them up,
|
|
// since what we've advertised as being acceptable in the past isn't really.
|
|
func DecodeChanges(changes []string) []string {
|
|
result := make([]string, 0, len(changes))
|
|
for _, possiblyMultilineChange := range changes {
|
|
for _, change := range strings.Split(possiblyMultilineChange, "\n") {
|
|
// In particular, we document that we accept values
|
|
// like "CMD=/bin/sh", which is not valid Dockerfile
|
|
// syntax, so we can't just pass such a value directly
|
|
// to a parser that's going to rightfully reject it.
|
|
// If we trim the string of whitespace at both ends,
|
|
// and the first occurrence of "=" is before the first
|
|
// whitespace, replace that "=" with whitespace.
|
|
change = strings.TrimSpace(change)
|
|
if change == "" {
|
|
continue
|
|
}
|
|
firstEqualIndex := strings.Index(change, "=")
|
|
firstSpaceIndex := strings.IndexFunc(change, unicode.IsSpace)
|
|
if firstEqualIndex != -1 && (firstSpaceIndex == -1 || firstEqualIndex < firstSpaceIndex) {
|
|
change = change[:firstEqualIndex] + " " + change[firstEqualIndex+1:]
|
|
}
|
|
result = append(result, change)
|
|
}
|
|
}
|
|
return result
|
|
}
|