Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
50bb128b
提交
50bb128b
authored
8月 12, 2017
作者:
Jeromy Johnson
提交者:
GitHub
8月 12, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4095 from ipfs/feat/object-pin
object put --pin option
上级
4e6954c9
778d6c63
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
42 行增加
和
5 行删除
+42
-5
object.go
core/commands/object/object.go
+25
-4
t0051-object.sh
test/sharness/t0051-object.sh
+17
-1
没有找到文件。
core/commands/object/object.go
浏览文件 @
50bb128b
...
@@ -16,6 +16,7 @@ import (
...
@@ -16,6 +16,7 @@ import (
core
"github.com/ipfs/go-ipfs/core"
core
"github.com/ipfs/go-ipfs/core"
dag
"github.com/ipfs/go-ipfs/merkledag"
dag
"github.com/ipfs/go-ipfs/merkledag"
path
"github.com/ipfs/go-ipfs/path"
path
"github.com/ipfs/go-ipfs/path"
pin
"github.com/ipfs/go-ipfs/pin"
ft
"github.com/ipfs/go-ipfs/unixfs"
ft
"github.com/ipfs/go-ipfs/unixfs"
cid
"gx/ipfs/QmTprEaAA2A9bst5XH7exuyi5KzNMK3SEDNN8rBDnKWcUS/go-cid"
cid
"gx/ipfs/QmTprEaAA2A9bst5XH7exuyi5KzNMK3SEDNN8rBDnKWcUS/go-cid"
...
@@ -355,6 +356,7 @@ And then run:
...
@@ -355,6 +356,7 @@ And then run:
Options
:
[]
cmds
.
Option
{
Options
:
[]
cmds
.
Option
{
cmds
.
StringOption
(
"inputenc"
,
"Encoding type of input data. One of: {
\"
protobuf
\"
,
\"
json
\"
}."
)
.
Default
(
"json"
),
cmds
.
StringOption
(
"inputenc"
,
"Encoding type of input data. One of: {
\"
protobuf
\"
,
\"
json
\"
}."
)
.
Default
(
"json"
),
cmds
.
StringOption
(
"datafieldenc"
,
"Encoding type of the data field, either
\"
text
\"
or
\"
base64
\"
."
)
.
Default
(
"text"
),
cmds
.
StringOption
(
"datafieldenc"
,
"Encoding type of the data field, either
\"
text
\"
or
\"
base64
\"
."
)
.
Default
(
"text"
),
cmds
.
BoolOption
(
"pin"
,
"Pin this object when adding."
)
.
Default
(
false
),
},
},
Run
:
func
(
req
cmds
.
Request
,
res
cmds
.
Response
)
{
Run
:
func
(
req
cmds
.
Request
,
res
cmds
.
Response
)
{
n
,
err
:=
req
.
InvocContext
()
.
GetNode
()
n
,
err
:=
req
.
InvocContext
()
.
GetNode
()
...
@@ -381,7 +383,17 @@ And then run:
...
@@ -381,7 +383,17 @@ And then run:
return
return
}
}
output
,
err
:=
objectPut
(
n
,
input
,
inputenc
,
datafieldenc
)
dopin
,
_
,
err
:=
req
.
Option
(
"pin"
)
.
Bool
()
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
if
dopin
{
defer
n
.
Blockstore
.
PinLock
()
.
Unlock
()
}
objectCid
,
err
:=
objectPut
(
n
,
input
,
inputenc
,
datafieldenc
)
if
err
!=
nil
{
if
err
!=
nil
{
errType
:=
cmds
.
ErrNormal
errType
:=
cmds
.
ErrNormal
if
err
==
ErrUnknownObjectEnc
{
if
err
==
ErrUnknownObjectEnc
{
...
@@ -391,7 +403,16 @@ And then run:
...
@@ -391,7 +403,16 @@ And then run:
return
return
}
}
res
.
SetOutput
(
output
)
if
dopin
{
n
.
Pinning
.
PinWithMode
(
objectCid
,
pin
.
Recursive
)
err
=
n
.
Pinning
.
Flush
()
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
}
res
.
SetOutput
(
&
Object
{
Hash
:
objectCid
.
String
()})
},
},
Marshalers
:
cmds
.
MarshalerMap
{
Marshalers
:
cmds
.
MarshalerMap
{
cmds
.
Text
:
func
(
res
cmds
.
Response
)
(
io
.
Reader
,
error
)
{
cmds
.
Text
:
func
(
res
cmds
.
Response
)
(
io
.
Reader
,
error
)
{
...
@@ -468,7 +489,7 @@ func nodeFromTemplate(template string) (*dag.ProtoNode, error) {
...
@@ -468,7 +489,7 @@ func nodeFromTemplate(template string) (*dag.ProtoNode, error) {
var
ErrEmptyNode
=
errors
.
New
(
"no data or links in this node"
)
var
ErrEmptyNode
=
errors
.
New
(
"no data or links in this node"
)
// objectPut takes a format option, serializes bytes from stdin and updates the dag with that data
// objectPut takes a format option, serializes bytes from stdin and updates the dag with that data
func
objectPut
(
n
*
core
.
IpfsNode
,
input
io
.
Reader
,
encoding
string
,
dataFieldEncoding
string
)
(
*
Object
,
error
)
{
func
objectPut
(
n
*
core
.
IpfsNode
,
input
io
.
Reader
,
encoding
string
,
dataFieldEncoding
string
)
(
*
cid
.
Cid
,
error
)
{
data
,
err
:=
ioutil
.
ReadAll
(
io
.
LimitReader
(
input
,
inputLimit
+
10
))
data
,
err
:=
ioutil
.
ReadAll
(
io
.
LimitReader
(
input
,
inputLimit
+
10
))
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -533,7 +554,7 @@ func objectPut(n *core.IpfsNode, input io.Reader, encoding string, dataFieldEnco
...
@@ -533,7 +554,7 @@ func objectPut(n *core.IpfsNode, input io.Reader, encoding string, dataFieldEnco
return
nil
,
err
return
nil
,
err
}
}
return
getOutput
(
dagnode
)
return
dagnode
.
Cid
(),
nil
}
}
// ErrUnknownObjectEnc is returned if a invalid encoding is supplied
// ErrUnknownObjectEnc is returned if a invalid encoding is supplied
...
...
test/sharness/t0051-object.sh
浏览文件 @
50bb128b
...
@@ -168,7 +168,23 @@ test_object_cmd() {
...
@@ -168,7 +168,23 @@ test_object_cmd() {
test_cmp expected actual
test_cmp expected actual
'
'
test_expect_success
"'ipfs object patch' should work (no unixfs-dir)"
'
test_expect_success
"'ipfs object put --pin' succeeds"
'
HASH="QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V" &&
echo "added $HASH" >expected &&
echo "{ \"Data\": \"abc\" }" | ipfs object put --pin >actual
'
test_expect_success
"'ipfs object put --pin' output looks good"
'
echo "added $HASH" >expected &&
test_cmp expected actual
'
test_expect_success
"after gc, objects still acessible"
'
ipfs repo gc > /dev/null &&
ipfs refs -r --timeout=2s $HASH > /dev/null
'
test_expect_success
"'ipfs object patch' should work (no unixfs-dir)"
'
EMPTY_DIR=$(ipfs object new) &&
EMPTY_DIR=$(ipfs object new) &&
OUTPUT=$(ipfs object patch $EMPTY_DIR add-link foo $EMPTY_DIR) &&
OUTPUT=$(ipfs object patch $EMPTY_DIR add-link foo $EMPTY_DIR) &&
ipfs object stat $OUTPUT
ipfs object stat $OUTPUT
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论