github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/builder/builder-next/exporter/overrides/overrides.go (about)

     1  package overrides
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/distribution/reference"
     7  )
     8  
     9  // SanitizeRepoAndTags parses the raw names to a slice of repoAndTag.
    10  // It removes duplicates and validates each repoName and tag to not contain a digest.
    11  func SanitizeRepoAndTags(names []string) (repoAndTags []string, err error) {
    12  	uniqNames := map[string]struct{}{}
    13  	for _, repo := range names {
    14  		if repo == "" {
    15  			continue
    16  		}
    17  
    18  		ref, err := reference.ParseNormalizedNamed(repo)
    19  		if err != nil {
    20  			return nil, err
    21  		}
    22  
    23  		if _, ok := ref.(reference.Digested); ok {
    24  			return nil, errors.New("build tag cannot contain a digest")
    25  		}
    26  
    27  		nameWithTag := reference.TagNameOnly(ref).String()
    28  		if _, exists := uniqNames[nameWithTag]; !exists {
    29  			uniqNames[nameWithTag] = struct{}{}
    30  			repoAndTags = append(repoAndTags, nameWithTag)
    31  		}
    32  	}
    33  	return repoAndTags, nil
    34  }