mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	Merge pull request #29841 from wefine/docker_image_tag_input_check
check both source_image_tag and target_image_tag for 'docker image tag'
This commit is contained in:
		
						commit
						fc9d74136b
					
				
					 2 changed files with 22 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -1,21 +1,23 @@
 | 
			
		|||
package client
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/url"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
 | 
			
		||||
	distreference "github.com/docker/distribution/reference"
 | 
			
		||||
	"github.com/docker/docker/api/types/reference"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ImageTag tags an image in the docker host
 | 
			
		||||
func (cli *Client) ImageTag(ctx context.Context, imageID, ref string) error {
 | 
			
		||||
	distributionRef, err := distreference.ParseNamed(ref)
 | 
			
		||||
func (cli *Client) ImageTag(ctx context.Context, source, target string) error {
 | 
			
		||||
	if _, err := distreference.ParseNamed(source); err != nil {
 | 
			
		||||
		return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", source)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	distributionRef, err := distreference.ParseNamed(target)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("Error parsing reference: %q is not a valid repository/tag", ref)
 | 
			
		||||
		return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", target)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if _, isCanonical := distributionRef.(distreference.Canonical); isCanonical {
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +30,7 @@ func (cli *Client) ImageTag(ctx context.Context, imageID, ref string) error {
 | 
			
		|||
	query.Set("repo", distributionRef.Name())
 | 
			
		||||
	query.Set("tag", tag)
 | 
			
		||||
 | 
			
		||||
	resp, err := cli.post(ctx, "/images/"+imageID+"/tag", query, nil, nil)
 | 
			
		||||
	resp, err := cli.post(ctx, "/images/"+source+"/tag", query, nil, nil)
 | 
			
		||||
	ensureReaderClosed(resp)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,11 +30,22 @@ func TestImageTagInvalidReference(t *testing.T) {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	err := client.ImageTag(context.Background(), "image_id", "aa/asdf$$^/aa")
 | 
			
		||||
	if err == nil || err.Error() != `Error parsing reference: "aa/asdf$$^/aa" is not a valid repository/tag` {
 | 
			
		||||
	if err == nil || err.Error() != `Error parsing reference: "aa/asdf$$^/aa" is not a valid repository/tag: invalid reference format` {
 | 
			
		||||
		t.Fatalf("expected ErrReferenceInvalidFormat, got %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestImageTagInvalidSourceImageName(t *testing.T) {
 | 
			
		||||
	client := &Client{
 | 
			
		||||
		client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := client.ImageTag(context.Background(), "invalid_source_image_name_", "repo:tag")
 | 
			
		||||
	if err == nil || err.Error() != "Error parsing reference: \"invalid_source_image_name_\" is not a valid repository/tag: invalid reference format" {
 | 
			
		||||
		t.Fatalf("expected Parsing Reference Error, got %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestImageTag(t *testing.T) {
 | 
			
		||||
	expectedURL := "/images/image_id/tag"
 | 
			
		||||
	tagCases := []struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue