in lambda/s3/transport.go [51:89]
func ParseReference(refString string) (types.ImageReference, error) {
if refString == "" {
return nil, errors.New("s3 reference cannot be empty")
}
parts := strings.SplitN(refString, ":", 2)
s3uri, err := tarfile.ParseS3Uri("s3:" + parts[0])
if err != nil {
return nil, err
}
var nt reference.NamedTagged
sourceIndex := -1
if len(parts) == 2 {
// A :tag or :@index was specified.
if len(parts[1]) > 0 && parts[1][0] == '@' {
i, err := strconv.Atoi(parts[1][1:])
if err != nil {
return nil, errors.Wrapf(err, "Invalid source index %s", parts[1])
}
if i < 0 {
return nil, errors.Errorf("Invalid source index @%d: must not be negative", i)
}
sourceIndex = i
} else {
ref, err := reference.ParseNormalizedNamed(parts[1])
if err != nil {
return nil, errors.Wrapf(err, "s3 parsing reference")
}
ref = reference.TagNameOnly(ref)
refTagged, isTagged := ref.(reference.NamedTagged)
if !isTagged { // If ref contains a digest, TagNameOnly does not change it
return nil, errors.Errorf("reference does not include a tag: %s", ref.String())
}
nt = refTagged
}
}
return newReference(s3uri, nt, sourceIndex)
}