dotcloud/docker

View on GitHub
builder/builder-next/exporter/overrides/overrides.go

Summary

Maintainability
A
0 mins
Test Coverage
package overrides

import (
    "errors"

    "github.com/distribution/reference"
)

// SanitizeRepoAndTags parses the raw names to a slice of repoAndTag.
// It removes duplicates and validates each repoName and tag to not contain a digest.
func SanitizeRepoAndTags(names []string) (repoAndTags []string, err error) {
    uniqNames := map[string]struct{}{}
    for _, repo := range names {
        if repo == "" {
            continue
        }

        ref, err := reference.ParseNormalizedNamed(repo)
        if err != nil {
            return nil, err
        }

        if _, ok := ref.(reference.Digested); ok {
            return nil, errors.New("build tag cannot contain a digest")
        }

        nameWithTag := reference.TagNameOnly(ref).String()
        if _, exists := uniqNames[nameWithTag]; !exists {
            uniqNames[nameWithTag] = struct{}{}
            repoAndTags = append(repoAndTags, nameWithTag)
        }
    }
    return repoAndTags, nil
}