Move docker reference logic to reference/docker package

Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
Derek McGowan 2022-05-31 22:40:49 -07:00
parent 8c27ce4193
commit 8ed54849a6
No known key found for this signature in database
GPG Key ID: F58C5D0A4405ACDB
3 changed files with 19 additions and 21 deletions

View File

@ -24,7 +24,7 @@ import (
"github.com/containerd/containerd"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/pkg/cri/util"
"github.com/containerd/containerd/reference"
"github.com/containerd/containerd/reference/docker"
imagedigest "github.com/opencontainers/go-digest"
"github.com/opencontainers/go-digest/digestset"
@ -206,7 +206,7 @@ func (s *store) add(img Image) error {
return nil
}
// Or else, merge and sort the references.
i.References = reference.Sort(util.MergeStringSlices(i.References, img.References))
i.References = docker.Sort(util.MergeStringSlices(i.References, img.References))
s.images[img.ID] = i
return nil
}

View File

@ -14,21 +14,26 @@
limitations under the License.
*/
package reference
package docker
import (
"sort"
"github.com/containerd/containerd/reference/docker"
)
// Sort sorts references by refRank then string comparison
// Sort sorts string references preferring higher information references
// The precedence is as follows:
// 1. Name + Tag + Digest
// 2. Name + Tag
// 3. Name + Digest
// 4. Name
// 5. Digest
// 6. Parse error
func Sort(references []string) []string {
var prefs []docker.Reference
var prefs []Reference
var bad []string
for _, ref := range references {
pref, err := docker.ParseAnyReference(ref)
pref, err := ParseAnyReference(ref)
if err != nil {
bad = append(bad, ref)
} else {
@ -51,22 +56,15 @@ func Sort(references []string) []string {
return append(refs, bad...)
}
// refRank ranks precedence for reference type, preferring higher information references
// 1. Name + Tag + Digest
// 2. Name + Tag
// 3. Name + Digest
// 4. Name
// 5. Digest
// 6. Parse error
func refRank(ref docker.Reference) uint8 {
if _, ok := ref.(docker.Named); ok {
if _, ok = ref.(docker.Tagged); ok {
if _, ok = ref.(docker.Digested); ok {
func refRank(ref Reference) uint8 {
if _, ok := ref.(Named); ok {
if _, ok = ref.(Tagged); ok {
if _, ok = ref.(Digested); ok {
return 1
}
return 2
}
if _, ok = ref.(docker.Digested); ok {
if _, ok = ref.(Digested); ok {
return 3
}
return 4

View File

@ -14,7 +14,7 @@
limitations under the License.
*/
package reference
package docker
import (
"io"