From b52210766f396cfe70e689fa415429ca4e6fac77 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Wed, 12 Aug 2015 13:44:23 -0700 Subject: [PATCH] an attempt at making the editor more efficient License: MIT Signed-off-by: Jeromy --- merkledag/utils/utils.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/merkledag/utils/utils.go b/merkledag/utils/utils.go index b073d4bf7..7985edcc0 100644 --- a/merkledag/utils/utils.go +++ b/merkledag/utils/utils.go @@ -151,3 +151,32 @@ func rmLink(ctx context.Context, ds dag.DAGService, root *dag.Node, path []strin return root, nil } + +func (e *Editor) WriteOutputTo(ds dag.DAGService) error { + return copyDag(e.GetNode(), e.ds, ds) +} + +func copyDag(nd *dag.Node, from, to dag.DAGService) error { + _, err := to.Add(nd) + if err != nil { + return err + } + + for _, lnk := range nd.Links { + child, err := lnk.GetNode(context.Background(), from) + if err != nil { + if err == dag.ErrNotFound { + // not found means we didnt modify it, and it should + // already be in the target datastore + continue + } + return err + } + + err = copyDag(child, from, to) + if err != nil { + return err + } + } + return nil +}