cmds/add fixed add output
Juan Batiz-Benet committed
Nov 11, 2014 at 23:16 UTC
f6c1cefe6082920c70ffb7b2d7d9835841f1cd04
1 file changed
+30
-24
core/commands2/add.go
+30
-24
@@ -1,6 +1,7 @@
1
package commands
2
3
import (
4
+ "bytes"
5
"errors"
6
"fmt"
7
"io"
@@ -22,7 +23,8 @@ import (
23
var ErrDepthLimitExceeded = fmt.Errorf("depth limit exceeded")
24
25
type AddOutput struct {
25
- Added []*Object
26
+ Objects []*Object
27
+ Names []string
28
}
29
30
var addCmd = &cmds.Command{
@@ -39,22 +41,26 @@ MerkleDAG. A smarter partial add with a staging area (like git)
41
remains to be implemented.
42
`,
43
Run: func(req cmds.Request) (interface{}, error) {
44
+ var added AddOutput
45
n := req.Context().Node
46
47
+ recursive, err := req.Option("r").Bool()
48
+ if err != nil {
49
+ return nil, err
50
+ }
51
+
52
// THIS IS A HORRIBLE HACK -- FIXME!!!
53
// see https://github.com/jbenet/go-ipfs/issues/309
46
- var added []*Object
54
55
// returns the last one
49
- addDagnodes := func(dns []*dag.Node) error {
50
- for _, dn := range dns {
51
- o, err := getOutput(dn)
52
- if err != nil {
53
- return err
54
- }
55
-
56
- added = append(added, o)
56
+ addDagnode := func(name string, dn *dag.Node) error {
57
+ o, err := getOutput(dn)
58
+ if err != nil {
59
+ return err
60
}
61
+
62
+ added.Objects = append(added.Objects, o)
63
+ added.Names = append(added.Names, name)
64
return nil
65
}
66
@@ -71,7 +77,7 @@ remains to be implemented.
77
}
78
79
log.Infof("adding file: %s", name)
74
- if err := addDagnodes(dns); err != nil {
80
+ if err := addDagnode(name, dns[len(dns)-1]); err != nil {
81
return nil, err
82
}
83
return dns[len(dns)-1], nil // last dag node is the file.
@@ -100,7 +106,7 @@ remains to be implemented.
106
}
107
108
log.Infof("adding dir: %s", name)
103
- if err := addDagnodes([]*dag.Node{tree}); err != nil {
109
+ if err := addDagnode(name, tree); err != nil {
110
return nil, err
111
}
112
return tree, nil
@@ -113,6 +119,9 @@ remains to be implemented.
119
}
120
121
if fi.IsDir() {
122
+ if !recursive {
123
+ return nil, errors.New("use -r to recursively add directories")
124
+ }
125
return addDir(fpath)
126
}
127
return addFile(fpath)
@@ -120,6 +129,7 @@ remains to be implemented.
129
130
paths, err := internal.CastToStrings(req.Arguments())
131
if err != nil {
132
+ panic(err)
133
return nil, err
134
}
135
@@ -128,6 +138,7 @@ remains to be implemented.
138
return nil, err
139
}
140
}
141
+ return added, nil
142
143
// readers, err := internal.CastToReaders(req.Arguments())
144
// if err != nil {
@@ -149,26 +160,21 @@ remains to be implemented.
160
//
161
// added = append(added, object)
162
// }
152
-
153
- return &AddOutput{added}, nil
163
+ //
164
+ // return &AddOutput{added}, nil
165
},
166
Marshallers: map[cmds.EncodingType]cmds.Marshaller{
167
cmds.Text: func(res cmds.Response) ([]byte, error) {
168
val, ok := res.Output().(*AddOutput)
169
if !ok {
159
- return nil, errors.New("cast err")
160
- }
161
- added := val.Added
162
- if len(added) == 1 {
163
- s := fmt.Sprintf("Added object: %s\n", added[0].Hash)
164
- return []byte(s), nil
170
+ return nil, errors.New("cast error")
171
}
172
167
- s := fmt.Sprintf("Added %v objects:\n", len(added))
168
- for _, obj := range added {
169
- s += fmt.Sprintf("- %s\n", obj.Hash)
173
+ var buf bytes.Buffer
174
+ for i, obj := range val.Objects {
175
+ buf.Write([]byte(fmt.Sprintf("added %s %s\n", obj.Hash, val.Names[i])))
176
}
171
- return []byte(s), nil
177
+ return buf.Bytes(), nil
178
},
179
},
180
Type: &AddOutput{},