@cryptotaxi247 / kubo / commits / f6c1cefe6

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{},