Unverified 提交 942760b4 作者: Steven Allen 提交者: GitHub

Merge pull request #6330 from ipfs/fix/obj-put-empty

object put: Allow empty objects
...@@ -73,17 +73,13 @@ func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Obj ...@@ -73,17 +73,13 @@ func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Obj
switch options.InputEnc { switch options.InputEnc {
case "json": case "json":
node := new(Node) node := new(Node)
err = json.Unmarshal(data, node) decoder := json.NewDecoder(bytes.NewReader(data))
decoder.DisallowUnknownFields()
err = decoder.Decode(node)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// check that we have data in the Node to add
// otherwise we will add the empty object without raising an error
if nodeEmpty(node) {
return nil, errors.New("no data or links in this node")
}
dagnode, err = deserializeNode(node, options.DataType) dagnode, err = deserializeNode(node, options.DataType)
if err != nil { if err != nil {
return nil, err return nil, err
...@@ -99,12 +95,6 @@ func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Obj ...@@ -99,12 +95,6 @@ func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Obj
return nil, err return nil, err
} }
// check that we have data in the Node to add
// otherwise we will add the empty object without raising an error
if nodeEmpty(node) {
return nil, errors.New("no data or links in this node")
}
dagnode, err = deserializeNode(node, options.DataType) dagnode, err = deserializeNode(node, options.DataType)
if err != nil { if err != nil {
return nil, err return nil, err
...@@ -368,7 +358,3 @@ func deserializeNode(nd *Node, dataFieldEncoding string) (*dag.ProtoNode, error) ...@@ -368,7 +358,3 @@ func deserializeNode(nd *Node, dataFieldEncoding string) (*dag.ProtoNode, error)
return dagnode, nil return dagnode, nil
} }
func nodeEmpty(node *Node) bool {
return node.Data == "" && len(node.Links) == 0
}
...@@ -111,11 +111,11 @@ test_object_cmd() { ...@@ -111,11 +111,11 @@ test_object_cmd() {
cat ../t0051-object-data/testPut.xml | ipfs object put --inputenc=xml > actual_putStdinOut cat ../t0051-object-data/testPut.xml | ipfs object put --inputenc=xml > actual_putStdinOut
' '
test_expect_success "'ipfs object put broken.xml' should fail" ' test_expect_failure "'ipfs object put broken.xml' should fail" '
test_expect_code 1 ipfs object put ../t0051-object-data/brokenPut.xml --inputenc=xml 2>actual_putBrokenErr >actual_putBroken test_expect_code 1 ipfs object put ../t0051-object-data/brokenPut.xml --inputenc=xml 2>actual_putBrokenErr >actual_putBroken
' '
test_expect_success "'ipfs object put broken.hxml' output looks good" ' test_expect_failure "'ipfs object put broken.hxml' output looks good" '
touch expected_putBroken && touch expected_putBroken &&
printf "Error: no data or links in this node\n" > expected_putBrokenErr && printf "Error: no data or links in this node\n" > expected_putBrokenErr &&
test_cmp expected_putBroken actual_putBroken && test_cmp expected_putBroken actual_putBroken &&
...@@ -170,7 +170,7 @@ test_object_cmd() { ...@@ -170,7 +170,7 @@ test_object_cmd() {
test_expect_success "'ipfs object put broken.hjson' output looks good" ' test_expect_success "'ipfs object put broken.hjson' output looks good" '
touch expected_putBroken && touch expected_putBroken &&
printf "Error: no data or links in this node\n" > expected_putBrokenErr && printf "Error: json: unknown field \"this\"\n" > expected_putBrokenErr &&
test_cmp expected_putBroken actual_putBroken && test_cmp expected_putBroken actual_putBroken &&
test_cmp expected_putBrokenErr actual_putBrokenErr test_cmp expected_putBrokenErr actual_putBrokenErr
' '
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论