forked from TrueCloudLab/distribution
39 lines
983 B
Go
39 lines
983 B
Go
|
package reference
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"regexp"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// TagRegexp matches valid tag names. From docker/docker:graph/tags.go.
|
||
|
TagRegexp = regexp.MustCompile(`[\w][\w.-]{0,127}`)
|
||
|
|
||
|
// TagAnchoredRegexp matches valid tag names, anchored at the start and
|
||
|
// end of the matched string.
|
||
|
TagAnchoredRegexp = regexp.MustCompile(`^` + TagRegexp.String() + `$`)
|
||
|
|
||
|
// ErrTagInvalid is returned when a tag does not match TagAnchoredRegexp.
|
||
|
ErrTagInvalid = fmt.Errorf("tag name must match %q", TagRegexp.String())
|
||
|
)
|
||
|
|
||
|
// Tag represents an image's tag name.
|
||
|
type Tag string
|
||
|
|
||
|
// NewTag returns a valid Tag from an input string s.
|
||
|
// If the validation fails, an error is returned.
|
||
|
func NewTag(s string) (Tag, error) {
|
||
|
tag := Tag(s)
|
||
|
return tag, tag.Validate()
|
||
|
}
|
||
|
|
||
|
// Validate returns ErrTagInvalid if tag does not match TagAnchoredRegexp.
|
||
|
//
|
||
|
// tag := [\w][\w.-]{0,127}
|
||
|
func (tag Tag) Validate() error {
|
||
|
if !TagAnchoredRegexp.MatchString(string(tag)) {
|
||
|
return ErrTagInvalid
|
||
|
}
|
||
|
return nil
|
||
|
}
|