提交 f6c1cefe 作者: Juan Batiz-Benet

cmds/add fixed add output

上级 0e41e193
package commands package commands
import ( import (
"bytes"
"errors" "errors"
"fmt" "fmt"
"io" "io"
...@@ -22,7 +23,8 @@ import ( ...@@ -22,7 +23,8 @@ import (
var ErrDepthLimitExceeded = fmt.Errorf("depth limit exceeded") var ErrDepthLimitExceeded = fmt.Errorf("depth limit exceeded")
type AddOutput struct { type AddOutput struct {
Added []*Object Objects []*Object
Names []string
} }
var addCmd = &cmds.Command{ var addCmd = &cmds.Command{
...@@ -39,22 +41,26 @@ MerkleDAG. A smarter partial add with a staging area (like git) ...@@ -39,22 +41,26 @@ MerkleDAG. A smarter partial add with a staging area (like git)
remains to be implemented. remains to be implemented.
`, `,
Run: func(req cmds.Request) (interface{}, error) { Run: func(req cmds.Request) (interface{}, error) {
var added AddOutput
n := req.Context().Node n := req.Context().Node
recursive, err := req.Option("r").Bool()
if err != nil {
return nil, err
}
// THIS IS A HORRIBLE HACK -- FIXME!!! // THIS IS A HORRIBLE HACK -- FIXME!!!
// see https://github.com/jbenet/go-ipfs/issues/309 // see https://github.com/jbenet/go-ipfs/issues/309
var added []*Object
// returns the last one // returns the last one
addDagnodes := func(dns []*dag.Node) error { addDagnode := func(name string, dn *dag.Node) error {
for _, dn := range dns {
o, err := getOutput(dn) o, err := getOutput(dn)
if err != nil { if err != nil {
return err return err
} }
added = append(added, o) added.Objects = append(added.Objects, o)
} added.Names = append(added.Names, name)
return nil return nil
} }
...@@ -71,7 +77,7 @@ remains to be implemented. ...@@ -71,7 +77,7 @@ remains to be implemented.
} }
log.Infof("adding file: %s", name) log.Infof("adding file: %s", name)
if err := addDagnodes(dns); err != nil { if err := addDagnode(name, dns[len(dns)-1]); err != nil {
return nil, err return nil, err
} }
return dns[len(dns)-1], nil // last dag node is the file. return dns[len(dns)-1], nil // last dag node is the file.
...@@ -100,7 +106,7 @@ remains to be implemented. ...@@ -100,7 +106,7 @@ remains to be implemented.
} }
log.Infof("adding dir: %s", name) log.Infof("adding dir: %s", name)
if err := addDagnodes([]*dag.Node{tree}); err != nil { if err := addDagnode(name, tree); err != nil {
return nil, err return nil, err
} }
return tree, nil return tree, nil
...@@ -113,6 +119,9 @@ remains to be implemented. ...@@ -113,6 +119,9 @@ remains to be implemented.
} }
if fi.IsDir() { if fi.IsDir() {
if !recursive {
return nil, errors.New("use -r to recursively add directories")
}
return addDir(fpath) return addDir(fpath)
} }
return addFile(fpath) return addFile(fpath)
...@@ -120,6 +129,7 @@ remains to be implemented. ...@@ -120,6 +129,7 @@ remains to be implemented.
paths, err := internal.CastToStrings(req.Arguments()) paths, err := internal.CastToStrings(req.Arguments())
if err != nil { if err != nil {
panic(err)
return nil, err return nil, err
} }
...@@ -128,6 +138,7 @@ remains to be implemented. ...@@ -128,6 +138,7 @@ remains to be implemented.
return nil, err return nil, err
} }
} }
return added, nil
// readers, err := internal.CastToReaders(req.Arguments()) // readers, err := internal.CastToReaders(req.Arguments())
// if err != nil { // if err != nil {
...@@ -149,26 +160,21 @@ remains to be implemented. ...@@ -149,26 +160,21 @@ remains to be implemented.
// //
// added = append(added, object) // added = append(added, object)
// } // }
//
return &AddOutput{added}, nil // return &AddOutput{added}, nil
}, },
Marshallers: map[cmds.EncodingType]cmds.Marshaller{ Marshallers: map[cmds.EncodingType]cmds.Marshaller{
cmds.Text: func(res cmds.Response) ([]byte, error) { cmds.Text: func(res cmds.Response) ([]byte, error) {
val, ok := res.Output().(*AddOutput) val, ok := res.Output().(*AddOutput)
if !ok { if !ok {
return nil, errors.New("cast err") return nil, errors.New("cast error")
}
added := val.Added
if len(added) == 1 {
s := fmt.Sprintf("Added object: %s\n", added[0].Hash)
return []byte(s), nil
} }
s := fmt.Sprintf("Added %v objects:\n", len(added)) var buf bytes.Buffer
for _, obj := range added { for i, obj := range val.Objects {
s += fmt.Sprintf("- %s\n", obj.Hash) buf.Write([]byte(fmt.Sprintf("added %s %s\n", obj.Hash, val.Names[i])))
} }
return []byte(s), nil return buf.Bytes(), nil
}, },
}, },
Type: &AddOutput{}, Type: &AddOutput{},
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论