package reference import ( distreference "github.com/docker/distribution/reference" ) // Parse parses the given references and returns the repository and // tag (if present) from it. If there is an error during parsing, it will // return an error. func Parse(ref string) (string, string, error) { distributionRef, err := distreference.ParseNamed(ref) if err != nil { return "", "", err } tag := GetTagFromNamedRef(distributionRef) return distributionRef.Name(), tag, nil } // GetTagFromNamedRef returns a tag from the specified reference. // This function is necessary as long as the docker "server" api makes the distinction between repository // and tags. func GetTagFromNamedRef(ref distreference.Named) string { var tag string switch x := ref.(type) { case distreference.Digested: tag = x.Digest().String() case distreference.NamedTagged: tag = x.Tag() default: tag = "latest" } return tag }