object-patch: Support linking to non-dagpb objects
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Dec 6, 2017 at 20:59 UTC
9aab19ea357b9741dbab0c94de2057f0b7b4cc82
3 files changed
+11
-9
core/commands/object/patch.go
+1
-7
@@ -325,13 +325,7 @@ to a file containing 'bar', and returns the hash of the new object.
325
return
326
}
327
328
- chpb, ok := childnd.(*dag.ProtoNode)
329
- if !ok {
330
- res.SetError(dag.ErrNotProtobuf, cmdkit.ErrNormal)
331
- return
332
- }
333
-
334
- err = e.InsertNodeAtPath(req.Context(), npath, chpb, createfunc)
328
+ err = e.InsertNodeAtPath(req.Context(), npath, childnd, createfunc)
329
if err != nil {
330
res.SetError(err, cmdkit.ErrNormal)
331
return
merkledag/utils/utils.go
+3
-2
@@ -212,8 +212,9 @@ func copyDag(nd *dag.ProtoNode, from, to dag.DAGService) error {
212
}
213
214
childpb, ok := child.(*dag.ProtoNode)
215
- if !ok {
216
- return dag.ErrNotProtobuf
215
+ if !ok { // leaf node
216
+ _, err := to.Add(nd)
217
+ return err
218
}
219
220
err = copyDag(childpb, from, to)
test/sharness/t0051-object.sh
+7
@@ -216,6 +216,13 @@ test_object_cmd() {
216
ipfs object stat /ipfs/$N3/foo/baz > /dev/null
217
'
218
219
+ test_expect_success "'ipfs object patch add-link' allow linking IPLD objects" '
220
+ EMPTY_DIR=$(ipfs object new unixfs-dir) &&
221
+ OBJ=$(echo "123" | ipfs dag put) &&
222
+ N1=$(ipfs object patch $EMPTY_DIR add-link foo $OBJ) &&
223
+ ipfs object stat $N1 > /dev/null
224
+ '
225
+
226
test_expect_success "object patch creation looks right" '
227
echo "QmPc73aWK9dgFBXe86P4PvQizHo9e5Qt7n7DAMXWuigFuG" > hash_exp &&
228
echo $N3 > hash_actual &&