Move docker reference logic to reference/docker package
Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
parent
8c27ce4193
commit
8ed54849a6
@ -24,7 +24,7 @@ import (
|
|||||||
"github.com/containerd/containerd"
|
"github.com/containerd/containerd"
|
||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/containerd/errdefs"
|
||||||
"github.com/containerd/containerd/pkg/cri/util"
|
"github.com/containerd/containerd/pkg/cri/util"
|
||||||
"github.com/containerd/containerd/reference"
|
"github.com/containerd/containerd/reference/docker"
|
||||||
|
|
||||||
imagedigest "github.com/opencontainers/go-digest"
|
imagedigest "github.com/opencontainers/go-digest"
|
||||||
"github.com/opencontainers/go-digest/digestset"
|
"github.com/opencontainers/go-digest/digestset"
|
||||||
@ -206,7 +206,7 @@ func (s *store) add(img Image) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// Or else, merge and sort the references.
|
// 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
|
s.images[img.ID] = i
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -14,21 +14,26 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package reference
|
package docker
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sort"
|
"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 {
|
func Sort(references []string) []string {
|
||||||
var prefs []docker.Reference
|
var prefs []Reference
|
||||||
var bad []string
|
var bad []string
|
||||||
|
|
||||||
for _, ref := range references {
|
for _, ref := range references {
|
||||||
pref, err := docker.ParseAnyReference(ref)
|
pref, err := ParseAnyReference(ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
bad = append(bad, ref)
|
bad = append(bad, ref)
|
||||||
} else {
|
} else {
|
||||||
@ -51,22 +56,15 @@ func Sort(references []string) []string {
|
|||||||
return append(refs, bad...)
|
return append(refs, bad...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// refRank ranks precedence for reference type, preferring higher information references
|
func refRank(ref Reference) uint8 {
|
||||||
// 1. Name + Tag + Digest
|
if _, ok := ref.(Named); ok {
|
||||||
// 2. Name + Tag
|
if _, ok = ref.(Tagged); ok {
|
||||||
// 3. Name + Digest
|
if _, ok = ref.(Digested); ok {
|
||||||
// 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 {
|
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
return 2
|
return 2
|
||||||
}
|
}
|
||||||
if _, ok = ref.(docker.Digested); ok {
|
if _, ok = ref.(Digested); ok {
|
||||||
return 3
|
return 3
|
||||||
}
|
}
|
||||||
return 4
|
return 4
|
@ -14,7 +14,7 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package reference
|
package docker
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
Loading…
Reference in New Issue
Block a user