提交 a3b5b393 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!23 image: bugfix for resolve an image and import base image

Merge pull request !23 from zvier/findimage
......@@ -15,10 +15,8 @@ package daemon
import (
"io"
"strings"
cp "github.com/containers/image/v5/copy"
dockerref "github.com/containers/image/v5/docker/reference"
is "github.com/containers/image/v5/storage"
"github.com/containers/image/v5/tarball"
"github.com/containers/image/v5/transports"
......@@ -32,8 +30,7 @@ import (
)
const (
noneReference = "<none>:<none>"
bufLen = 1024
bufLen = 1024
)
// Import an image from a tarball
......@@ -59,7 +56,8 @@ func (b *Backend) Import(serv pb.Control_ImportServer) error {
}
logrus.Infof("Received and import image %q", reference)
reference, err := parseReference(reference)
reference, err := dockerfile.ExpandTag(reference, localStore)
if err != nil {
return err
}
......@@ -98,15 +96,3 @@ func (b *Backend) Import(serv pb.Control_ImportServer) error {
return nil
}
func parseReference(ref string) (string, error) {
ref = strings.TrimSpace(ref)
if ref == "" {
return noneReference, nil
}
if _, err := dockerref.Parse(ref); err != nil {
return "", err
}
return ref, nil
}
// Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
// isula-build licensed under the Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of Mulan PSL v2 at:
// http://license.coscl.org.cn/MulanPSL2
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
// PURPOSE.
// See the Mulan PSL v2 for more details.
// Author: Zekun Liu
// Create: 2020-07-25
// Description: This is test file for daemon import.go
package daemon
import (
"testing"
"gotest.tools/assert"
)
func TestParseReference(t *testing.T) {
type testcase struct {
name string
reference string
expect string
isErr bool
errStr string
}
var testcases = []testcase{
{
name: "repo only",
reference: "busybox",
expect: "busybox",
},
{
name: "repo and tag",
reference: "busybox:latest",
expect: "busybox:latest",
},
{
name: "ref with tag missing",
reference: "busybox:",
isErr: true,
errStr: "invalid reference format",
},
{
name: "empty ref",
reference: "",
expect: noneReference,
},
{
name: "ref with no tag",
reference: "busybox",
expect: "busybox",
},
{
name: "ref with space",
reference: "busybox: latest",
isErr: true,
errStr: "invalid reference format",
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
ref, err := parseReference(tc.reference)
assert.Equal(t, err != nil, tc.isErr, tc.name)
if err != nil {
assert.ErrorContains(t, err, tc.errStr, tc.name)
}
if err == nil {
assert.Equal(t, ref, tc.expect, tc.name)
}
})
}
}
......@@ -516,7 +516,7 @@ func ResolveName(name string, sc *types.SystemContext, store store.Store) ([]str
return nil, "", nil
}
// 2. try to resolve image name as an image id and find it in store
// 2. try to find image with name or id in local store
if imageID := tryResolveNameInStore(name, store); imageID != "" {
return []string{imageID}, "", nil
}
......@@ -544,16 +544,13 @@ func ResolveName(name string, sc *types.SystemContext, store store.Store) ([]str
}
func tryResolveNameInStore(name string, store store.Store) string {
logrus.Infof("Try to resolve: %s in local storage with image id", name)
logrus.Infof("Try to find image: %s in local storage", name)
img, err := store.Image(name)
if err != nil || img == nil {
if err != nil {
return ""
}
if strings.HasPrefix(img.ID, name) {
return img.ID
}
return ""
return img.ID
}
func tryResolveNameWithTransport(name string) (string, string) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册