@cryptotaxi247 / kubo / commits / fe6ac42c0

core/commands2: Updated 'add' command for request file API

Matt Bell committed Nov 16, 2014 at 01:10 UTC fe6ac42c0ebfdbc267c3146249b379be8535b5ed
1 file changed +12 -70
core/commands2/add.go
+12 -70
@@ -5,18 +5,13 @@ import (
5 "errors"
6 "fmt"
7 "io"
8 - "io/ioutil"
9 - "os"
10 - "path/filepath"
8
9 cmds "github.com/jbenet/go-ipfs/commands"
10 core "github.com/jbenet/go-ipfs/core"
14 - internal "github.com/jbenet/go-ipfs/core/commands2/internal"
11 importer "github.com/jbenet/go-ipfs/importer"
12 "github.com/jbenet/go-ipfs/importer/chunk"
13 dag "github.com/jbenet/go-ipfs/merkledag"
14 pinning "github.com/jbenet/go-ipfs/pin"
19 - ft "github.com/jbenet/go-ipfs/unixfs"
15 u "github.com/jbenet/go-ipfs/util"
16 )
17
@@ -43,7 +38,7 @@ remains to be implemented.
38 cmds.BoolOption("recursive", "r", "Must be specified when adding directories"),
39 },
40 Arguments: []cmds.Argument{
46 - cmds.StringArg("path", true, true, "The path to a file to be added to IPFS"),
41 + cmds.FileArg("path", true, true, "The path to a file to be added to IPFS"),
42 },
43 Run: func(req cmds.Request) (interface{}, error) {
44 added := &AddOutput{}
@@ -52,14 +47,11 @@ remains to be implemented.
47 return nil, err
48 }
49
55 - recursive, _, err := req.Option("r").Bool()
50 + _, _, err = req.Option("r").Bool()
51 if err != nil {
52 return nil, err
53 }
54
60 - // THIS IS A HORRIBLE HACK -- FIXME!!!
61 - // see https://github.com/jbenet/go-ipfs/issues/309
62 -
55 // returns the last one
56 addDagnode := func(name string, dn *dag.Node) error {
57 o, err := getOutput(dn)
@@ -72,84 +64,34 @@ remains to be implemented.
64 return nil
65 }
66
75 - addFile := func(name string) (*dag.Node, error) {
76 - f, err := os.Open(name)
77 - if err != nil {
78 - return nil, err
79 - }
80 - defer f.Close()
81 -
82 - dns, err := add(n, []io.Reader{f})
67 + addFile := func(file cmds.File) (*dag.Node, error) {
68 + dns, err := add(n, []io.Reader{file})
69 if err != nil {
70 return nil, err
71 }
72
87 - log.Infof("adding file: %s", name)
88 - if err := addDagnode(name, dns[len(dns)-1]); err != nil {
73 + log.Infof("adding file: %s", file.FileName())
74 + if err := addDagnode(file.FileName(), dns[len(dns)-1]); err != nil {
75 return nil, err
76 }
77 return dns[len(dns)-1], nil // last dag node is the file.
78 }
79
94 - var addPath func(name string) (*dag.Node, error)
95 - addDir := func(name string) (*dag.Node, error) {
96 - tree := &dag.Node{Data: ft.FolderPBData()}
97 -
98 - entries, err := ioutil.ReadDir(name)
99 - if err != nil {
100 - return nil, err
101 - }
102 -
103 - // construct nodes for containing files.
104 - for _, e := range entries {
105 - fp := filepath.Join(name, e.Name())
106 - nd, err := addPath(fp)
107 - if err != nil {
108 - return nil, err
109 - }
110 -
111 - if err = tree.AddNodeLink(e.Name(), nd); err != nil {
112 - return nil, err
113 - }
114 - }
115 -
116 - log.Infof("adding dir: %s", name)
117 - if err := addNode(n, tree); err != nil {
118 - return nil, err
119 - }
120 -
121 - if err := addDagnode(name, tree); err != nil {
122 - return nil, err
123 - }
124 - return tree, nil
125 - }
80 + // TODO: handle directories
81
127 - addPath = func(fpath string) (*dag.Node, error) {
128 - fi, err := os.Stat(fpath)
82 + file, err := req.Files().NextFile()
83 + for file != nil {
84 + _, err := addFile(file)
85 if err != nil {
86 return nil, err
87 }
88
133 - if fi.IsDir() {
134 - if !recursive {
135 - return nil, errors.New("use -r to recursively add directories")
136 - }
137 - return addDir(fpath)
138 - }
139 - return addFile(fpath)
89 + file, err = req.Files().NextFile()
90 }
141 -
142 - paths, err := internal.CastToStrings(req.Arguments())
143 - if err != nil {
144 - panic(err)
91 + if err != nil && err != io.EOF {
92 return nil, err
93 }
94
148 - for _, f := range paths {
149 - if _, err := addPath(f); err != nil {
150 - return nil, err
151 - }
152 - }
95 return added, nil
96
97 // readers, err := internal.CastToReaders(req.Arguments())