@cryptotaxi247 / kubo / commits / cd4674371

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