Vendor in latest containers/buildah

Pulls in fix for COPY --from when using --layers

Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
This commit is contained in:
Urvashi Mohnani
2018-11-20 20:07:17 +00:00
parent fe4f09493f
commit bd61c779ca
10 changed files with 153 additions and 44 deletions

View File

@ -172,8 +172,11 @@ type Stage struct {
Node *parser.Node
}
func NewStages(node *parser.Node, b *Builder) Stages {
func NewStages(node *parser.Node, b *Builder) (Stages, error) {
var stages Stages
if err := b.extractHeadingArgsFromNode(node); err != nil {
return stages, err
}
for i, root := range SplitBy(node, command.From) {
name, _ := extractNameFromNode(root.Children[0])
if len(name) == 0 {
@ -189,7 +192,36 @@ func NewStages(node *parser.Node, b *Builder) Stages {
Node: root,
})
}
return stages
return stages, nil
}
func (b *Builder) extractHeadingArgsFromNode(node *parser.Node) error {
var args []*parser.Node
var children []*parser.Node
extract := true
for _, child := range node.Children {
if extract && child.Value == command.Arg {
args = append(args, child)
} else {
if child.Value == command.From {
extract = false
}
children = append(children, child)
}
}
for _, c := range args {
step := b.Step()
if err := step.Resolve(c); err != nil {
return err
}
if err := b.Run(step, NoopExecutor, false); err != nil {
return err
}
}
node.Children = children
return nil
}
func extractNameFromNode(node *parser.Node) (string, bool) {
@ -345,6 +377,9 @@ var ErrNoFROM = fmt.Errorf("no FROM statement found")
// is set to the first From found, or left unchanged if already
// set.
func (b *Builder) From(node *parser.Node) (string, error) {
if err := b.extractHeadingArgsFromNode(node); err != nil {
return "", err
}
children := SplitChildren(node, command.From)
switch {
case len(children) == 0:

View File

@ -27,11 +27,6 @@ var (
obRgex = regexp.MustCompile(`(?i)^\s*ONBUILD\s*`)
)
// dispatch with no layer / parsing. This is effectively not a command.
func nullDispatch(b *Builder, args []string, attributes map[string]bool, flagArgs []string, original string) error {
return nil
}
// ENV foo bar
//
// Sets the environment variable foo to bar, also makes interpolation
@ -181,6 +176,17 @@ func from(b *Builder, args []string, attributes map[string]bool, flagArgs []stri
}
name := args[0]
// Support ARG before from
argStrs := []string{}
for n, v := range b.Args {
argStrs = append(argStrs, n+"="+v)
}
var err error
if name, err = ProcessWord(name, argStrs); err != nil {
return err
}
// Windows cannot support a container with no base image.
if name == NoBaseImageSpecifier {
if runtime.GOOS == "windows" {
@ -438,6 +444,7 @@ func healthcheck(b *Builder, args []string, attributes map[string]bool, flagArgs
healthcheck := docker.HealthConfig{}
flags := flag.NewFlagSet("", flag.ContinueOnError)
flags.String("start-period", "", "")
flags.String("interval", "", "")
flags.String("timeout", "", "")
flRetries := flags.String("retries", "", "")
@ -462,6 +469,12 @@ func healthcheck(b *Builder, args []string, attributes map[string]bool, flagArgs
return fmt.Errorf("Unknown type %#v in HEALTHCHECK (try CMD)", typ)
}
period, err := parseOptInterval(flags.Lookup("start-period"))
if err != nil {
return err
}
healthcheck.StartPeriod = period
interval, err := parseOptInterval(flags.Lookup("interval"))
if err != nil {
return err

View File

@ -122,8 +122,7 @@ func (b *Step) Resolve(ast *parser.Node) error {
envs := b.Env
for ast.Next != nil {
ast = ast.Next
var str string
str = ast.Value
str := ast.Value
if replaceEnvAllowed[cmd] {
var err error
var words []string