Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
isula-build
提交
7215df96
I
isula-build
项目概览
openeuler
/
isula-build
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
isula-build
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7215df96
编写于
8月 25, 2020
作者:
O
openeuler-ci-bot
提交者:
Gitee
8月 25, 2020
浏览文件
操作
浏览文件
下载
差异文件
!63 images: support specifying image in images command
Merge pull request !63 from Vanient/images
上级
d7f9b8cb
b1534d5f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
49 addition
and
13 deletion
+49
-13
cmd/cli/image_test.go
cmd/cli/image_test.go
+8
-1
cmd/cli/images.go
cmd/cli/images.go
+18
-7
daemon/images.go
daemon/images.go
+23
-5
未找到文件。
cmd/cli/image_test.go
浏览文件 @
7215df96
...
...
@@ -27,9 +27,16 @@ func TestImageCommand(t *testing.T) {
assert
.
ErrorContains
(
t
,
err
,
"isula_build.sock"
)
}
func
TestImageCommandMultipleArgs
(
t
*
testing
.
T
)
{
imageCmd
:=
NewImagesCmd
()
args
:=
[]
string
{
"aaa"
,
"bbb"
}
err
:=
imagesCommand
(
imageCmd
,
args
)
assert
.
ErrorContains
(
t
,
err
,
"requires at most one argument"
)
}
func
TestRunList
(
t
*
testing
.
T
)
{
ctx
:=
context
.
Background
()
cli
:=
newMockClient
(
&
mockGrpcClient
{})
err
:=
runList
(
ctx
,
&
cli
)
err
:=
runList
(
ctx
,
&
cli
,
""
)
assert
.
NilError
(
t
,
err
)
}
cmd/cli/images.go
浏览文件 @
7215df96
...
...
@@ -18,11 +18,11 @@ import (
"fmt"
"github.com/bndr/gotabulate"
"github.com/pkg/errors"
"github.com/spf13/cobra"
constant
"isula.org/isula-build"
pb
"isula.org/isula-build/api/services"
"isula.org/isula-build/util"
)
const
(
...
...
@@ -33,17 +33,17 @@ REPOSITORY TAG IMAGE ID CREATED
)
const
(
imagesExample
=
`isula-build ctr-img images`
imagesExample
=
`isula-build ctr-img images
isula-build ctr-img images <image name>`
)
// NewImagesCmd returns images command
func
NewImagesCmd
()
*
cobra
.
Command
{
// imagesCmd represents the "images" command
imagesCmd
:=
&
cobra
.
Command
{
Use
:
"images"
,
Use
:
"images
[REPOSITORY[:TAG]]
"
,
Short
:
"List locally stored images"
,
Example
:
imagesExample
,
Args
:
util
.
NoArgs
,
RunE
:
imagesCommand
,
}
...
...
@@ -51,18 +51,29 @@ func NewImagesCmd() *cobra.Command {
}
func
imagesCommand
(
c
*
cobra
.
Command
,
args
[]
string
)
error
{
if
len
(
args
)
>
1
{
return
errors
.
New
(
"isula-build images requires at most one argument"
)
}
var
image
string
if
len
(
args
)
==
0
{
image
=
""
}
else
{
image
=
args
[
0
]
}
ctx
:=
context
.
TODO
()
cli
,
err
:=
NewClient
(
ctx
)
if
err
!=
nil
{
return
err
}
return
runList
(
ctx
,
cli
)
return
runList
(
ctx
,
cli
,
image
)
}
func
runList
(
ctx
context
.
Context
,
cli
Cli
)
error
{
func
runList
(
ctx
context
.
Context
,
cli
Cli
,
image
string
)
error
{
resp
,
err
:=
cli
.
Client
()
.
List
(
ctx
,
&
pb
.
ListRequest
{
ImageName
:
""
,
ImageName
:
image
,
})
if
err
!=
nil
{
return
err
...
...
daemon/images.go
浏览文件 @
7215df96
...
...
@@ -23,6 +23,7 @@ import (
constant
"isula.org/isula-build"
pb
"isula.org/isula-build/api/services"
"isula.org/isula-build/image"
"isula.org/isula-build/store"
"isula.org/isula-build/util"
)
...
...
@@ -37,12 +38,29 @@ func (b *Backend) List(ctx context.Context, req *pb.ListRequest) (*pb.ListRespon
"ImageName"
:
req
.
GetImageName
(),
})
.
Info
(
"ListRequest received"
)
imageName
:=
req
.
ImageName
reqRepository
,
reqTag
:=
imageName
,
""
var
reqRepository
,
reqTag
string
const
minImageFieldLenWithTag
=
2
parts
:=
strings
.
Split
(
imageName
,
":"
)
if
len
(
parts
)
>=
minImageFieldLenWithTag
{
reqRepository
,
reqTag
=
strings
.
Join
(
parts
[
0
:
len
(
parts
)
-
1
],
":"
),
parts
[
len
(
parts
)
-
1
]
if
req
.
ImageName
!=
""
{
imageName
:=
req
.
ImageName
_
,
img
,
err
:=
image
.
FindImage
(
b
.
daemon
.
localStore
,
imageName
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"find local image %v error"
,
imageName
)
}
parts
:=
strings
.
Split
(
imageName
,
":"
)
if
len
(
parts
)
>=
minImageFieldLenWithTag
{
reqRepository
,
reqTag
=
strings
.
Join
(
parts
[
0
:
len
(
parts
)
-
1
],
":"
),
parts
[
len
(
parts
)
-
1
]
}
imageInfo
:=
&
pb
.
ListResponse_ImageInfo
{
Repository
:
reqRepository
,
Tag
:
reqTag
,
Id
:
img
.
ID
,
Created
:
img
.
Created
.
Format
(
constant
.
LayoutTime
),
Size_
:
getImageSize
(
&
b
.
daemon
.
localStore
,
img
.
ID
),
}
return
&
pb
.
ListResponse
{
Images
:
[]
*
pb
.
ListResponse_ImageInfo
{
imageInfo
}},
nil
}
images
,
err
:=
b
.
daemon
.
localStore
.
Images
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录