Skip to content

Commit 72ee15c

Browse files
authored
Merge pull request #164 from ipfs/merge/cmdkit
merge in go-ipfs-cmdkit
2 parents 6a7c2ca + 5346223 commit 72ee15c

35 files changed

+692
-266
lines changed

.travis.yml

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ env:
1010
global:
1111
- GOTFLAGS="-race"
1212
matrix:
13-
- BUILD_DEPTYPE=gx
1413
- BUILD_DEPTYPE=gomod
1514

1615

argument.go

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package cmds
2+
3+
type ArgumentType int
4+
5+
const (
6+
ArgString ArgumentType = iota
7+
ArgFile
8+
)
9+
10+
type Argument struct {
11+
Name string
12+
Type ArgumentType
13+
Required bool // error if no value is specified
14+
Variadic bool // unlimited values can be specfied
15+
SupportsStdin bool // can accept stdin as a value
16+
Recursive bool // supports recursive file adding (with '-r' flag)
17+
Description string
18+
}
19+
20+
func StringArg(name string, required, variadic bool, description string) Argument {
21+
return Argument{
22+
Name: name,
23+
Type: ArgString,
24+
Required: required,
25+
Variadic: variadic,
26+
Description: description,
27+
}
28+
}
29+
30+
func FileArg(name string, required, variadic bool, description string) Argument {
31+
return Argument{
32+
Name: name,
33+
Type: ArgFile,
34+
Required: required,
35+
Variadic: variadic,
36+
Description: description,
37+
}
38+
}
39+
40+
// TODO: modifiers might need a different API?
41+
// e.g. passing enum values into arg constructors variadically
42+
// (`FileArg("file", ArgRequired, ArgStdin, ArgRecursive)`)
43+
44+
func (a Argument) EnableStdin() Argument {
45+
a.SupportsStdin = true
46+
return a
47+
}
48+
49+
func (a Argument) EnableRecursive() Argument {
50+
if a.Type != ArgFile {
51+
panic("Only FileArgs can enable recursive")
52+
}
53+
54+
a.Recursive = true
55+
return a
56+
}

chan.go

+4-6
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import (
44
"context"
55
"io"
66
"sync"
7-
8-
"github.com/ipfs/go-ipfs-cmdkit"
97
)
108

119
func NewChanResponsePair(req *Request) (ResponseEmitter, Response) {
@@ -63,18 +61,18 @@ func (r *chanResponse) Request() *Request {
6361
return r.req
6462
}
6563

66-
func (r *chanResponse) Error() *cmdkit.Error {
64+
func (r *chanResponse) Error() *Error {
6765
select {
6866
case <-r.closeCh:
6967
if r.err == nil || r.err == io.EOF {
7068
return nil
7169
}
7270

73-
if e, ok := r.err.(*cmdkit.Error); ok {
71+
if e, ok := r.err.(*Error); ok {
7472
return e
7573
}
7674

77-
return &cmdkit.Error{Message: r.err.Error()}
75+
return &Error{Message: r.err.Error()}
7876
default:
7977
return nil
8078
}
@@ -194,7 +192,7 @@ func (re *chanResponseEmitter) closeWithError(err error) {
194192
err = io.EOF
195193
}
196194

197-
if e, ok := err.(cmdkit.Error); ok {
195+
if e, ok := err.(Error); ok {
198196
err = &e
199197
}
200198

cli/helptext.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"strings"
99
"text/template"
1010

11-
"github.com/ipfs/go-ipfs-cmdkit"
1211
"github.com/ipfs/go-ipfs-cmds"
1312
)
1413

@@ -252,13 +251,13 @@ func generateSynopsis(cmd *cmds.Command, path string) string {
252251
if len(n) > 1 {
253252
pre = "--"
254253
}
255-
if opt.Type() == cmdkit.Bool && opt.Default() == true {
254+
if opt.Type() == cmds.Bool && opt.Default() == true {
256255
pre = "--"
257256
sopt = fmt.Sprintf("%s%s=false", pre, n)
258257
break
259258
} else {
260259
if i == 0 {
261-
if opt.Type() == cmdkit.Bool {
260+
if opt.Type() == cmds.Bool {
262261
sopt = fmt.Sprintf("%s%s", pre, n)
263262
} else {
264263
sopt = fmt.Sprintf("%s%s=<%s>", pre, n, valopt)
@@ -311,7 +310,7 @@ func optionFlag(flag string) string {
311310

312311
func optionText(cmd ...*cmds.Command) []string {
313312
// get a slice of the options we want to list out
314-
options := make([]cmdkit.Option, 0)
313+
options := make([]cmds.Option, 0)
315314
for _, c := range cmd {
316315
for _, opt := range c.Options {
317316
options = append(options, opt)
@@ -411,7 +410,7 @@ func usageText(cmd *cmds.Command) string {
411410
return s
412411
}
413412

414-
func argUsageText(arg cmdkit.Argument) string {
413+
func argUsageText(arg cmds.Argument) string {
415414
s := arg.Name
416415

417416
if arg.Required {

cli/helptext_test.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@ import (
44
"strings"
55
"testing"
66

7-
"github.com/ipfs/go-ipfs-cmdkit"
87
"github.com/ipfs/go-ipfs-cmds"
98
)
109

1110
func TestSynopsisGenerator(t *testing.T) {
1211
command := &cmds.Command{
13-
Arguments: []cmdkit.Argument{
14-
cmdkit.StringArg("required", true, false, ""),
15-
cmdkit.StringArg("variadic", false, true, ""),
12+
Arguments: []cmds.Argument{
13+
cmds.StringArg("required", true, false, ""),
14+
cmds.StringArg("variadic", false, true, ""),
1615
},
17-
Options: []cmdkit.Option{
18-
cmdkit.StringOption("opt", "o", "Option"),
16+
Options: []cmds.Option{
17+
cmds.StringOption("opt", "o", "Option"),
1918
},
20-
Helptext: cmdkit.HelpText{
19+
Helptext: cmds.HelpText{
2120
SynopsisOptionsValues: map[string]string{
2221
"opt": "OPTION",
2322
},

cli/parse.go

+11-13
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@ import (
1010
"path/filepath"
1111
"strings"
1212

13-
"github.com/ipfs/go-ipfs-cmds"
14-
1513
osh "github.com/Kubuxu/go-os-helper"
16-
"github.com/ipfs/go-ipfs-cmdkit"
14+
"github.com/ipfs/go-ipfs-cmds"
1715
"github.com/ipfs/go-ipfs-files"
1816
logging "github.com/ipfs/go-log"
1917
)
@@ -101,7 +99,7 @@ func parse(req *cmds.Request, cmdline []string, root *cmds.Command) (err error)
10199
var (
102100
path = make([]string, 0, len(cmdline))
103101
args = make([]string, 0, len(cmdline))
104-
opts = cmdkit.OptMap{}
102+
opts = cmds.OptMap{}
105103
cmd = root
106104
)
107105

@@ -246,7 +244,7 @@ func parseArgs(req *cmds.Request, root *cmds.Command, stdin *os.File) error {
246244

247245
fillingVariadic := iArgDef+1 > len(argDefs)
248246
switch argDef.Type {
249-
case cmdkit.ArgString:
247+
case cmds.ArgString:
250248
if len(inputs) > 0 {
251249
stringArgs, inputs = append(stringArgs, inputs[0]), inputs[1:]
252250
} else if stdin != nil && argDef.SupportsStdin && !fillingVariadic {
@@ -258,7 +256,7 @@ func parseArgs(req *cmds.Request, root *cmds.Command, stdin *os.File) error {
258256
stdin = nil
259257
}
260258
}
261-
case cmdkit.ArgFile:
259+
case cmds.ArgFile:
262260
if len(inputs) > 0 {
263261
// treat stringArg values as file paths
264262
fpath := inputs[0]
@@ -390,7 +388,7 @@ func splitkv(opt string) (k, v string, ok bool) {
390388
}
391389
}
392390

393-
func parseOpt(opt, value string, opts map[string]cmdkit.Option) (interface{}, error) {
391+
func parseOpt(opt, value string, opts map[string]cmds.Option) (interface{}, error) {
394392
optDef, ok := opts[opt]
395393
if !ok {
396394
return nil, fmt.Errorf("unknown option %q", opt)
@@ -408,7 +406,7 @@ type kv struct {
408406
Value interface{}
409407
}
410408

411-
func (st *parseState) parseShortOpts(optDefs map[string]cmdkit.Option) ([]kv, error) {
409+
func (st *parseState) parseShortOpts(optDefs map[string]cmds.Option) ([]kv, error) {
412410
k, vStr, ok := splitkv(st.cmdline[st.i][1:])
413411
kvs := make([]kv, 0, len(k))
414412

@@ -431,7 +429,7 @@ func (st *parseState) parseShortOpts(optDefs map[string]cmdkit.Option) ([]kv, er
431429
case !ok:
432430
return nil, fmt.Errorf("unknown option %q", k)
433431

434-
case od.Type() == cmdkit.Bool:
432+
case od.Type() == cmds.Bool:
435433
// single char flags for bools
436434
kvs = append(kvs, kv{
437435
Key: flag,
@@ -471,14 +469,14 @@ func (st *parseState) parseShortOpts(optDefs map[string]cmdkit.Option) ([]kv, er
471469
return kvs, nil
472470
}
473471

474-
func (st *parseState) parseLongOpt(optDefs map[string]cmdkit.Option) (string, interface{}, error) {
472+
func (st *parseState) parseLongOpt(optDefs map[string]cmds.Option) (string, interface{}, error) {
475473
k, v, ok := splitkv(st.peek()[2:])
476474
if !ok {
477475
optDef, ok := optDefs[k]
478476
if !ok {
479477
return "", nil, fmt.Errorf("unknown option %q", k)
480478
}
481-
if optDef.Type() == cmdkit.Bool {
479+
if optDef.Type() == cmds.Bool {
482480
return k, true, nil
483481
} else if st.i < len(st.cmdline)-1 {
484482
st.i++
@@ -492,7 +490,7 @@ func (st *parseState) parseLongOpt(optDefs map[string]cmdkit.Option) (string, in
492490
return k, optval, err
493491
}
494492

495-
func getArgDef(i int, argDefs []cmdkit.Argument) *cmdkit.Argument {
493+
func getArgDef(i int, argDefs []cmds.Argument) *cmds.Argument {
496494
if i < len(argDefs) {
497495
// get the argument definition (usually just argDefs[i])
498496
return &argDefs[i]
@@ -509,7 +507,7 @@ func getArgDef(i int, argDefs []cmdkit.Argument) *cmdkit.Argument {
509507
const notRecursiveFmtStr = "'%s' is a directory, use the '-%s' flag to specify directories"
510508
const dirNotSupportedFmtStr = "invalid path '%s', argument '%s' does not support directories"
511509

512-
func appendFile(fpath string, argDef *cmdkit.Argument, recursive, hidden bool) (files.Node, error) {
510+
func appendFile(fpath string, argDef *cmds.Argument, recursive, hidden bool) (files.Node, error) {
513511
stat, err := os.Lstat(fpath)
514512
if err != nil {
515513
return nil, err

0 commit comments

Comments
 (0)