feat(imageref): parse image references into repo, tag and digest
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
// Package imageref splits container image references into repository, tag
|
||||
// and digest.
|
||||
package imageref
|
||||
|
||||
import "strings"
|
||||
|
||||
// Ref is an image reference split into its parts. Tag and Digest are empty
|
||||
// when the reference has none.
|
||||
type Ref struct {
|
||||
Repo string
|
||||
Tag string
|
||||
Digest string
|
||||
}
|
||||
|
||||
// Parse splits ref into repository, tag and digest. A colon before the last
|
||||
// "/" belongs to a registry host and port ("localhost:5000/foo"), not a tag.
|
||||
func Parse(ref string) Ref {
|
||||
var r Ref
|
||||
if at := strings.Index(ref, "@"); at >= 0 {
|
||||
r.Digest = ref[at+1:]
|
||||
ref = ref[:at]
|
||||
}
|
||||
slash := strings.LastIndex(ref, "/")
|
||||
last := ref[slash+1:]
|
||||
if colon := strings.Index(last, ":"); colon >= 0 {
|
||||
r.Tag = last[colon+1:]
|
||||
ref = ref[:slash+1+colon]
|
||||
}
|
||||
r.Repo = ref
|
||||
return r
|
||||
}
|
||||
|
||||
// String reassembles the reference as repo[:tag][@digest].
|
||||
func (r Ref) String() string {
|
||||
s := r.Repo
|
||||
if r.Tag != "" {
|
||||
s += ":" + r.Tag
|
||||
}
|
||||
if r.Digest != "" {
|
||||
s += "@" + r.Digest
|
||||
}
|
||||
return s
|
||||
}
|
||||
Reference in New Issue
Block a user