Fixed merge conflict
This commit is contained in:
		
						commit
						316e2847a7
					
				|  | @ -46,6 +46,8 @@ func GetCommand(cmd instructions.Command, buildcontext string) (DockerCommand, e | ||||||
| 		return &EnvCommand{cmd: c}, nil | 		return &EnvCommand{cmd: c}, nil | ||||||
| 	case *instructions.WorkdirCommand: | 	case *instructions.WorkdirCommand: | ||||||
| 		return &WorkdirCommand{cmd: c}, nil | 		return &WorkdirCommand{cmd: c}, nil | ||||||
|  | 	case *instructions.LabelCommand: | ||||||
|  | 		return &LabelCommand{cmd: c}, nil | ||||||
| 	} | 	} | ||||||
| 	return nil, errors.Errorf("%s is not a supported command", cmd.Name()) | 	return nil, errors.Errorf("%s is not a supported command", cmd.Name()) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -76,6 +76,6 @@ func (r *ExposeCommand) FilesToSnapshot() []string { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (r *ExposeCommand) CreatedBy() string { | func (r *ExposeCommand) CreatedBy() string { | ||||||
| 	s := []string{"/bin/sh", "-c"} | 	s := []string{r.cmd.Name()} | ||||||
| 	return strings.Join(append(s, r.cmd.Ports...), " ") | 	return strings.Join(append(s, r.cmd.Ports...), " ") | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,72 @@ | ||||||
|  | /* | ||||||
|  | Copyright 2018 Google LLC | ||||||
|  | 
 | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  | 
 | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | 
 | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package commands | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"github.com/containers/image/manifest" | ||||||
|  | 	"github.com/docker/docker/builder/dockerfile/instructions" | ||||||
|  | 	"github.com/docker/docker/builder/dockerfile/shell" | ||||||
|  | 	"github.com/sirupsen/logrus" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type LabelCommand struct { | ||||||
|  | 	cmd *instructions.LabelCommand | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (r *LabelCommand) ExecuteCommand(config *manifest.Schema2Config) error { | ||||||
|  | 	return updateLabels(r.cmd.Labels, config) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func updateLabels(labels []instructions.KeyValuePair, config *manifest.Schema2Config) error { | ||||||
|  | 	existingLabels := config.Labels | ||||||
|  | 
 | ||||||
|  | 	// Let's unescape values before setting the label
 | ||||||
|  | 	shlex := shell.NewLex('\\') | ||||||
|  | 	for index, kvp := range labels { | ||||||
|  | 		unescaped, err := shlex.ProcessWord(kvp.Value, []string{}) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 		labels[index] = instructions.KeyValuePair{ | ||||||
|  | 			Key:   kvp.Key, | ||||||
|  | 			Value: unescaped, | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	for _, kvp := range labels { | ||||||
|  | 		logrus.Infof("Applying label %s=%s", kvp.Key, kvp.Value) | ||||||
|  | 		existingLabels[kvp.Key] = kvp.Value | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	config.Labels = existingLabels | ||||||
|  | 	return nil | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // No files have changed, this command only touches metadata.
 | ||||||
|  | func (r *LabelCommand) FilesToSnapshot() []string { | ||||||
|  | 	return []string{} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // CreatedBy returns some information about the command for the image config history
 | ||||||
|  | func (r *LabelCommand) CreatedBy() string { | ||||||
|  | 	l := []string{r.cmd.Name()} | ||||||
|  | 	for _, kvp := range r.cmd.Labels { | ||||||
|  | 		l = append(l, kvp.String()) | ||||||
|  | 	} | ||||||
|  | 	return strings.Join(l, " ") | ||||||
|  | } | ||||||
|  | @ -0,0 +1,60 @@ | ||||||
|  | /* | ||||||
|  | Copyright 2018 Google LLC | ||||||
|  | 
 | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  | 
 | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | 
 | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package commands | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"github.com/GoogleCloudPlatform/k8s-container-builder/testutil" | ||||||
|  | 	"github.com/containers/image/manifest" | ||||||
|  | 	"github.com/docker/docker/builder/dockerfile/instructions" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestUpdateLabels(t *testing.T) { | ||||||
|  | 	cfg := &manifest.Schema2Config{ | ||||||
|  | 		Labels: map[string]string{ | ||||||
|  | 			"foo": "bar", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	labels := []instructions.KeyValuePair{ | ||||||
|  | 		{ | ||||||
|  | 			Key:   "foo", | ||||||
|  | 			Value: "override", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Key:   "bar", | ||||||
|  | 			Value: "baz", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Key:   "multiword", | ||||||
|  | 			Value: "lots\\ of\\ words", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Key:   "backslashes", | ||||||
|  | 			Value: "lots\\\\ of\\\\ words", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	expectedLabels := map[string]string{ | ||||||
|  | 		"foo":         "override", | ||||||
|  | 		"bar":         "baz", | ||||||
|  | 		"multiword":   "lots of words", | ||||||
|  | 		"backslashes": "lots\\ of\\ words", | ||||||
|  | 	} | ||||||
|  | 	updateLabels(labels, cfg) | ||||||
|  | 	testutil.CheckErrorAndDeepEqual(t, false, nil, expectedLabels, cfg.Labels) | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue