cleanup
License: MIT Signed-off-by: Jeromy <why@ipfs.io>
Jeromy committed
Jul 8, 2016 at 16:04 UTC
cd467437177e5b62fae11b917f36460ee7b496b2
2 files changed
+29
-32
commands/cli/parse.go
+6
-1
@@ -17,6 +17,11 @@ import (
17
18
var log = logging.Logger("commands/cli")
19
20
+// stdinSpecialName is a name applied to the 'stdin' file so we can differentiate
21
+// it from potential 'real' files being passed in. The '*' character is invalid in
22
+// path names and won't appear otherwise.
23
+const stdinSpecialName = "*stdin*"
24
+
25
// Parse parses the input commandline string (cmd, flags, and args).
26
// returns the corresponding command Request object.
27
func Parse(input []string, stdin *os.File, root *cmds.Command) (cmds.Request, *cmds.Command, []string, error) {
@@ -302,7 +307,7 @@ func parseArgs(inputs []string, stdin *os.File, argDefs []cmds.Argument, recursi
307
return nil, nil, err
308
}
309
if istty {
305
- fname = "*stdin*"
310
+ fname = stdinSpecialName
311
}
312
313
fileArgs[stdin.Name()] = files.NewReaderFile(fname, "", stdin, nil)
commands/request.go
+23
-31
@@ -200,8 +200,8 @@ func (r *request) Context() context.Context {
200
}
201
202
func (r *request) haveVarArgsFromStdin() bool {
203
- // we expect varargs if we have a variadic required argument and no arguments to
204
- // fill it
203
+ // we expect varargs if we have a string argument that supports stdin
204
+ // and not arguments to satisfy it
205
if len(r.cmd.Arguments) == 0 {
206
return false
207
}
@@ -214,16 +214,8 @@ func (r *request) haveVarArgsFromStdin() bool {
214
// VarArgs can be used when you want string arguments as input
215
// and also want to be able to handle them in a streaming fashion
216
func (r *request) VarArgs(f func(string) error) error {
217
- var i int
218
- for i = 0; i < len(r.cmd.Arguments); i++ {
219
- if r.cmd.Arguments[i].Variadic || r.cmd.Arguments[i].SupportsStdin {
220
- break
221
- }
222
- }
223
-
224
- args := r.arguments[i:]
225
- if len(args) > 0 {
226
- for _, arg := range args {
217
+ if len(r.arguments) >= len(r.cmd.Arguments) {
218
+ for _, arg := range r.arguments[len(r.cmd.Arguments)-1:] {
219
err := f(arg)
220
if err != nil {
221
return err
@@ -231,29 +223,29 @@ func (r *request) VarArgs(f func(string) error) error {
223
}
224
225
return nil
234
- } else {
235
- if r.files != nil {
236
- fi, err := r.files.NextFile()
237
- if err != nil {
238
- return err
239
- }
226
+ }
227
241
- if fi.FileName() == "*stdin*" {
242
- fmt.Fprintln(os.Stderr, "ipfs: Reading from stdin; send Ctrl-d to stop.")
243
- }
228
+ if r.files == nil {
229
+ return fmt.Errorf("expected more arguments from stdin")
230
+ }
231
245
- scan := bufio.NewScanner(fi)
246
- for scan.Scan() {
247
- err := f(scan.Text())
248
- if err != nil {
249
- return err
250
- }
251
- }
252
- return nil
253
- } else {
254
- return fmt.Errorf("expected more arguments from stdin")
232
+ fi, err := r.files.NextFile()
233
+ if err != nil {
234
+ return err
235
+ }
236
+
237
+ if fi.FileName() == "*stdin*" {
238
+ fmt.Fprintln(os.Stderr, "ipfs: Reading from stdin; send Ctrl-d to stop.")
239
+ }
240
+
241
+ scan := bufio.NewScanner(fi)
242
+ for scan.Scan() {
243
+ err := f(scan.Text())
244
+ if err != nil {
245
+ return err
246
}
247
}
248
+ return nil
249
}
250
251
func getContext(base context.Context, req Request) (context.Context, error) {