@cryptotaxi247 / kubo / commits / b3aee2872

move mem-dag construction to its own function, and actually call WriteOutputTo

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Aug 17, 2015 at 10:21 UTC b3aee2872f03e6247a37389a0059236940aeb27c
4 files changed +35 -13
blockservice/blockservice.go
+3
@@ -104,6 +104,9 @@ func (s *BlockService) GetBlock(ctx context.Context, k key.Key) (*blocks.Block,
104 log.Debug("Blockservice: Searching bitswap.")
105 blk, err := s.Exchange.GetBlock(ctx, k)
106 if err != nil {
107 + if err == blockstore.ErrNotFound {
108 + return nil, ErrNotFound
109 + }
110 return nil, err
111 }
112 return blk, nil
core/commands/add.go
+19 -11
@@ -108,7 +108,7 @@ remains to be implemented.
108 hidden, _, _ := req.Option(hiddenOptionName).Bool()
109 chunker, _, _ := req.Option(chunkerOptionName).String()
110
111 - e := dagutils.NewDagEditor(n.DAG, newDirNode())
111 + e := dagutils.NewDagEditor(NewMemoryDagService(), newDirNode())
112 if hash {
113 nilnode, err := core.NewNode(n.Context(), &core.BuildCfg{
114 //TODO: need this to be true or all files
@@ -120,16 +120,6 @@ remains to be implemented.
120 return
121 }
122 n = nilnode
123 -
124 - // build mem-datastore for editor's intermediary nodes
125 - bs := bstore.NewBlockstore(syncds.MutexWrap(ds.NewMapDatastore()))
126 - bsrv, err := bserv.New(bs, offline.Exchange(bs))
127 - if err != nil {
128 - res.SetError(err, cmds.ErrNormal)
129 - return
130 - }
131 - memds := dag.NewDAGService(bsrv)
132 - e = dagutils.NewDagEditor(memds, newDirNode())
123 }
124
125 outChan := make(chan interface{}, 8)
@@ -182,6 +172,15 @@ remains to be implemented.
172 return err
173 }
174
175 + if !hash {
176 + // copy intermediary nodes from editor to our actual dagservice
177 + err := e.WriteOutputTo(n.DAG)
178 + if err != nil {
179 + log.Error("WRITE OUT: ", err)
180 + return err
181 + }
182 + }
183 +
184 rootnd, err := fileAdder.RootNode()
185 if err != nil {
186 return err
@@ -196,6 +195,7 @@ remains to be implemented.
195 res.SetError(err, cmds.ErrNormal)
196 return
197 }
198 +
199 }()
200 },
201 PostRun: func(req cmds.Request, res cmds.Response) {
@@ -284,6 +284,13 @@ remains to be implemented.
284 Type: AddedObject{},
285 }
286
287 +func NewMemoryDagService() dag.DAGService {
288 + // build mem-datastore for editor's intermediary nodes
289 + bs := bstore.NewBlockstore(syncds.MutexWrap(ds.NewMapDatastore()))
290 + bsrv := bserv.New(bs, offline.Exchange(bs))
291 + return dag.NewDAGService(bsrv)
292 +}
293 +
294 // Internal structure for holding the switches passed to the `add` call
295 type adder struct {
296 ctx cxt.Context
@@ -335,6 +342,7 @@ func (params *adder) RootNode() (*dag.Node, error) {
342 if !params.wrap && len(r.Links) == 1 {
343 var err error
344 r, err = r.Links[0].GetNode(params.ctx, params.editor.GetDagService())
345 + log.Error("ERR: ", err)
346 // no need to output, as we've already done so.
347 return r, err
348 }
merkledag/merkledag.go
+3
@@ -98,6 +98,9 @@ func (n *dagService) Get(ctx context.Context, k key.Key) (*Node, error) {
98
99 b, err := n.Blocks.GetBlock(ctx, k)
100 if err != nil {
101 + if err == bserv.ErrNotFound {
102 + return nil, ErrNotFound
103 + }
104 return nil, err
105 }
106
merkledag/utils/diff.go
+10 -2
@@ -41,7 +41,11 @@ func ApplyChange(ctx context.Context, ds dag.DAGService, nd *dag.Node, cs []*Cha
41 for _, c := range cs {
42 switch c.Type {
43 case Add:
44 - err := e.InsertNodeAtPath(ctx, c.Path, c.After, nil)
44 + child, err := ds.Get(ctx, c.After)
45 + if err != nil {
46 + return nil, err
47 + }
48 + err = e.InsertNodeAtPath(ctx, c.Path, child, nil)
49 if err != nil {
50 return nil, err
51 }
@@ -57,7 +61,11 @@ func ApplyChange(ctx context.Context, ds dag.DAGService, nd *dag.Node, cs []*Cha
61 if err != nil {
62 return nil, err
63 }
60 - err = e.InsertNodeAtPath(ctx, c.Path, c.After, nil)
64 + child, err := ds.Get(ctx, c.After)
65 + if err != nil {
66 + return nil, err
67 + }
68 + err = e.InsertNodeAtPath(ctx, c.Path, child, nil)
69 if err != nil {
70 return nil, err
71 }