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())