diff --git a/core/commands/object/patch.go b/core/commands/object/patch.go index 2668bfcf8..a53a4a062 100644 --- a/core/commands/object/patch.go +++ b/core/commands/object/patch.go @@ -325,13 +325,7 @@ to a file containing 'bar', and returns the hash of the new object. return } - chpb, ok := childnd.(*dag.ProtoNode) - if !ok { - res.SetError(dag.ErrNotProtobuf, cmdkit.ErrNormal) - return - } - - err = e.InsertNodeAtPath(req.Context(), npath, chpb, createfunc) + err = e.InsertNodeAtPath(req.Context(), npath, childnd, createfunc) if err != nil { res.SetError(err, cmdkit.ErrNormal) return diff --git a/merkledag/utils/utils.go b/merkledag/utils/utils.go index 790d98dc8..b976907dc 100644 --- a/merkledag/utils/utils.go +++ b/merkledag/utils/utils.go @@ -212,8 +212,9 @@ func copyDag(nd *dag.ProtoNode, from, to dag.DAGService) error { } childpb, ok := child.(*dag.ProtoNode) - if !ok { - return dag.ErrNotProtobuf + if !ok { // leaf node + _, err := to.Add(nd) + return err } err = copyDag(childpb, from, to) diff --git a/test/sharness/t0051-object.sh b/test/sharness/t0051-object.sh index 80913c78c..244dcc831 100755 --- a/test/sharness/t0051-object.sh +++ b/test/sharness/t0051-object.sh @@ -216,6 +216,13 @@ test_object_cmd() { ipfs object stat /ipfs/$N3/foo/baz > /dev/null ' + test_expect_success "'ipfs object patch add-link' allow linking IPLD objects" ' + EMPTY_DIR=$(ipfs object new unixfs-dir) && + OBJ=$(echo "123" | ipfs dag put) && + N1=$(ipfs object patch $EMPTY_DIR add-link foo $OBJ) && + ipfs object stat $N1 > /dev/null + ' + test_expect_success "object patch creation looks right" ' echo "QmPc73aWK9dgFBXe86P4PvQizHo9e5Qt7n7DAMXWuigFuG" > hash_exp && echo $N3 > hash_actual &&