in lib/dockerregistry/manifests.go [49:83]
func (t *manifests) getDigest(path string, subtype PathSubType) ([]byte, error) {
repo, err := GetRepo(path)
if err != nil {
return nil, fmt.Errorf("get repo: %s", err)
}
var digest core.Digest
switch subtype {
case _tags:
tag, _, err := GetManifestTag(path)
if err != nil {
return nil, fmt.Errorf("get manifest tag: %s", err)
}
digest, err = t.transferer.GetTag(fmt.Sprintf("%s:%s", repo, tag))
if err != nil {
return nil, fmt.Errorf("transferer get tag: %w", err)
}
case _revisions:
var err error
digest, err = GetManifestDigest(path)
if err != nil {
return nil, fmt.Errorf("get manifest digest: %s", err)
}
default:
return nil, &InvalidRequestError{path}
}
blob, err := t.transferer.Download(repo, digest)
if err != nil {
return nil, fmt.Errorf("transferer download: %w", err)
}
defer blob.Close()
return []byte(digest.String()), nil
}