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
}