refactor all command code
License: MIT Signed-off-by: Kejie Zhang <601172892@qq.com>
Kejie Zhang committed
Oct 4, 2018 at 22:14 UTC
3dc0ce7fa19eef6dd8528fb968e67e409988f0a4
25 files changed
+415
-213
core/commands/active.go
+6
-2
@@ -14,6 +14,10 @@ import (
14
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
15
)
16
17
+const (
18
+ verboseOptionName = "v"
19
+)
20
+
21
var ActiveReqsCmd = &cmds.Command{
22
Helptext: cmdkit.HelpText{
23
Tagline: "List commands run on this IPFS node.",
@@ -25,7 +29,7 @@ Lists running and recently run commands.
29
res.SetOutput(req.InvocContext().ReqLog.Report())
30
},
31
Options: []cmdkit.Option{
28
- cmdkit.BoolOption("verbose", "v", "Print extra information."),
32
+ cmdkit.BoolOption("verbose", verboseOptionName, "Print extra information."),
33
},
34
Subcommands: map[string]*cmds.Command{
35
"clear": clearInactiveCmd,
@@ -44,7 +48,7 @@ Lists running and recently run commands.
48
}
49
buf := new(bytes.Buffer)
50
47
- verbose, _, _ := res.Request().Option("v").Bool()
51
+ verbose, _, _ := res.Request().Option(verboseOptionName).Bool()
52
53
w := tabwriter.NewWriter(buf, 4, 4, 2, ' ', 0)
54
if verbose {
core/commands/bitswap.go
+6
-2
@@ -32,6 +32,10 @@ var BitswapCmd = &cmds.Command{
32
},
33
}
34
35
+const (
36
+ peerOptionName = "peer"
37
+)
38
+
39
var showWantlistCmd = &oldcmds.Command{
40
Helptext: cmdkit.HelpText{
41
Tagline: "Show blocks currently on the wantlist.",
@@ -39,7 +43,7 @@ var showWantlistCmd = &oldcmds.Command{
43
Print out all blocks currently on the bitswap wantlist for the local peer.`,
44
},
45
Options: []cmdkit.Option{
42
- cmdkit.StringOption("peer", "p", "Specify which peer to show wantlist for. Default: self."),
46
+ cmdkit.StringOption(peerOptionName, "p", "Specify which peer to show wantlist for. Default: self."),
47
},
48
Type: KeyList{},
49
Run: func(req oldcmds.Request, res oldcmds.Response) {
@@ -60,7 +64,7 @@ Print out all blocks currently on the bitswap wantlist for the local peer.`,
64
return
65
}
66
63
- pstr, found, err := req.Option("peer").String()
67
+ pstr, found, err := req.Option(peerOptionName).String()
68
if err != nil {
69
res.SetError(err, cmdkit.ErrNormal)
70
return
core/commands/block.go
+21
-10
@@ -126,6 +126,12 @@ It outputs to stdout, and <key> is a base58 encoded multihash.
126
},
127
}
128
129
+const (
130
+ blockFormatOptionName = "format"
131
+ mhtypeOptionName = "mhtype"
132
+ mhlenOptionName = "mhlen"
133
+)
134
+
135
var blockPutCmd = &cmds.Command{
136
Helptext: cmdkit.HelpText{
137
Tagline: "Store input as an IPFS block.",
@@ -142,9 +148,9 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
148
cmdkit.FileArg("data", true, false, "The data to be stored as an IPFS block.").EnableStdin(),
149
},
150
Options: []cmdkit.Option{
145
- cmdkit.StringOption("format", "f", "cid format for blocks to be created with."),
146
- cmdkit.StringOption("mhtype", "multihash hash function").WithDefault("sha2-256"),
147
- cmdkit.IntOption("mhlen", "multihash hash length").WithDefault(-1),
151
+ cmdkit.StringOption(blockFormatOptionName, "f", "cid format for blocks to be created with."),
152
+ cmdkit.StringOption(mhtypeOptionName, "multihash hash function").WithDefault("sha2-256"),
153
+ cmdkit.IntOption(mhlenOptionName, "multihash hash length").WithDefault(-1),
154
},
155
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
156
api, err := cmdenv.GetApi(env)
@@ -157,18 +163,18 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
163
return err
164
}
165
160
- mhtype, _ := req.Options["mhtype"].(string)
166
+ mhtype, _ := req.Options[mhtypeOptionName].(string)
167
mhtval, ok := mh.Names[mhtype]
168
if !ok {
169
return fmt.Errorf("unrecognized multihash function: %s", mhtype)
170
}
171
166
- mhlen, ok := req.Options["mhlen"].(int)
172
+ mhlen, ok := req.Options[mhlenOptionName].(int)
173
if !ok {
174
return errors.New("missing option \"mhlen\"")
175
}
176
171
- format, formatSet := req.Options["format"].(string)
177
+ format, formatSet := req.Options[blockFormatOptionName].(string)
178
if !formatSet {
179
if mhtval != mh.SHA2_256 || (mhlen != -1 && mhlen != 32) {
180
format = "protobuf"
@@ -200,6 +206,11 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
206
Type: BlockStat{},
207
}
208
209
+const (
210
+ forceOptionName = "force"
211
+ blockQuietOptionName = "quiet"
212
+)
213
+
214
var blockRmCmd = &cmds.Command{
215
Helptext: cmdkit.HelpText{
216
Tagline: "Remove IPFS block(s).",
@@ -212,8 +223,8 @@ It takes a list of base58 encoded multihashes to remove.
223
cmdkit.StringArg("hash", true, true, "Bash58 encoded multihash of block(s) to remove."),
224
},
225
Options: []cmdkit.Option{
215
- cmdkit.BoolOption("force", "f", "Ignore nonexistent blocks."),
216
- cmdkit.BoolOption("quiet", "q", "Write minimal output."),
226
+ cmdkit.BoolOption(forceOptionName, "f", "Ignore nonexistent blocks."),
227
+ cmdkit.BoolOption(blockQuietOptionName, "q", "Write minimal output."),
228
},
229
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
230
api, err := cmdenv.GetApi(env)
@@ -221,8 +232,8 @@ It takes a list of base58 encoded multihashes to remove.
232
return err
233
}
234
224
- force, _ := req.Options["force"].(bool)
225
- quiet, _ := req.Options["quiet"].(bool)
235
+ force, _ := req.Options[forceOptionName].(bool)
236
+ quiet, _ := req.Options[blockQuietOptionName].(bool)
237
238
// TODO: use batching coreapi when done
239
for _, b := range req.Arguments {
core/commands/bootstrap.go
+12
-4
@@ -40,6 +40,10 @@ Running 'ipfs bootstrap' with no arguments will run 'ipfs bootstrap list'.
40
},
41
}
42
43
+const (
44
+ defaultOptionName = "default"
45
+)
46
+
47
var bootstrapAddCmd = &cmds.Command{
48
Helptext: cmdkit.HelpText{
49
Tagline: "Add peers to the bootstrap list.",
@@ -53,14 +57,14 @@ in the bootstrap list).
57
},
58
59
Options: []cmdkit.Option{
56
- cmdkit.BoolOption("default", "Add default bootstrap nodes. (Deprecated, use 'default' subcommand instead)"),
60
+ cmdkit.BoolOption(defaultOptionName, "Add default bootstrap nodes. (Deprecated, use 'default' subcommand instead)"),
61
},
62
Subcommands: map[string]*cmds.Command{
63
"default": bootstrapAddDefaultCmd,
64
},
65
66
Run: func(req cmds.Request, res cmds.Response) {
63
- deflt, _, err := req.Option("default").Bool()
67
+ deflt, _, err := req.Option(defaultOptionName).Bool()
68
if err != nil {
69
res.SetError(err, cmdkit.ErrNormal)
70
return
@@ -191,6 +195,10 @@ in the bootstrap list).`,
195
},
196
}
197
198
+const (
199
+ bootstrapAllOptionName = "all"
200
+)
201
+
202
var bootstrapRemoveCmd = &cmds.Command{
203
Helptext: cmdkit.HelpText{
204
Tagline: "Remove peers from the bootstrap list.",
@@ -202,13 +210,13 @@ var bootstrapRemoveCmd = &cmds.Command{
210
cmdkit.StringArg("peer", false, true, peerOptionDesc).EnableStdin(),
211
},
212
Options: []cmdkit.Option{
205
- cmdkit.BoolOption("all", "Remove all bootstrap peers. (Deprecated, use 'all' subcommand)"),
213
+ cmdkit.BoolOption(bootstrapAllOptionName, "Remove all bootstrap peers. (Deprecated, use 'all' subcommand)"),
214
},
215
Subcommands: map[string]*cmds.Command{
216
"all": bootstrapRemoveAllCmd,
217
},
218
Run: func(req cmds.Request, res cmds.Response) {
211
- all, _, err := req.Option("all").Bool()
219
+ all, _, err := req.Option(bootstrapAllOptionName).Bool()
220
if err != nil {
221
res.SetError(err, cmdkit.ErrNormal)
222
return
core/commands/cat.go
+9
-5
@@ -13,7 +13,11 @@ import (
13
cmds "gx/ipfs/QmXTmUCBtDUrzDYVzASogLiNph7EBuYqEgPL7QoHNMzUnz/go-ipfs-cmds"
14
)
15
16
-const progressBarMinSize = 1024 * 1024 * 8 // show progress bar for outputs > 8MiB
16
+const (
17
+ progressBarMinSize = 1024 * 1024 * 8 // show progress bar for outputs > 8MiB
18
+ offsetOptionName = "offset"
19
+ lengthOptionName = "length"
20
+)
21
22
var CatCmd = &cmds.Command{
23
Helptext: cmdkit.HelpText{
@@ -25,8 +29,8 @@ var CatCmd = &cmds.Command{
29
cmdkit.StringArg("ipfs-path", true, true, "The path to the IPFS object(s) to be outputted.").EnableStdin(),
30
},
31
Options: []cmdkit.Option{
28
- cmdkit.IntOption("offset", "o", "Byte offset to begin reading from."),
29
- cmdkit.IntOption("length", "l", "Maximum number of bytes to read."),
32
+ cmdkit.IntOption(offsetOptionName, "o", "Byte offset to begin reading from."),
33
+ cmdkit.IntOption(lengthOptionName, "l", "Maximum number of bytes to read."),
34
},
35
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
36
node, err := cmdenv.GetNode(env)
@@ -45,12 +49,12 @@ var CatCmd = &cmds.Command{
49
}
50
}
51
48
- offset, _ := req.Options["offset"].(int)
52
+ offset, _ := req.Options[offsetOptionName].(int)
53
if offset < 0 {
54
return fmt.Errorf("cannot specify negative offset")
55
}
56
53
- max, found := req.Options["length"].(int)
57
+ max, found := req.Options[lengthOptionName].(int)
58
if err != nil {
59
return err
60
}
core/commands/cid.go
+27
-12
@@ -31,6 +31,12 @@ var CidCmd = &cmds.Command{
31
},
32
}
33
34
+const (
35
+ cidFormatOptionName = "f"
36
+ cidVerisonOptionName = "v"
37
+ cidMultibaseOptionName = "b"
38
+)
39
+
40
var cidFmtCmd = &cmds.Command{
41
Helptext: cmdkit.HelpText{
42
Tagline: "Format and convert a CID in various useful ways.",
@@ -44,14 +50,14 @@ The optional format string is a printf style format string:
50
cmdkit.StringArg("cid", true, true, "Cids to format.").EnableStdin(),
51
},
52
Options: []cmdkit.Option{
47
- cmdkit.StringOption("f", "Printf style format string.").WithDefault("%s"),
48
- cmdkit.StringOption("v", "CID version to convert to."),
49
- cmdkit.StringOption("b", "Multibase to display CID in."),
53
+ cmdkit.StringOption(cidFormatOptionName, "Printf style format string.").WithDefault("%s"),
54
+ cmdkit.StringOption(cidVerisonOptionName, "CID version to convert to."),
55
+ cmdkit.StringOption(cidMultibaseOptionName, "Multibase to display CID in."),
56
},
57
Run: func(req *cmds.Request, resp cmds.ResponseEmitter, env cmds.Environment) error {
52
- fmtStr, _ := req.Options["f"].(string)
53
- verStr, _ := req.Options["v"].(string)
54
- baseStr, _ := req.Options["b"].(string)
58
+ fmtStr, _ := req.Options[cidFormatOptionName].(string)
59
+ verStr, _ := req.Options[cidVerisonOptionName].(string)
60
+ baseStr, _ := req.Options[cidMultibaseOptionName].(string)
61
62
opts := cidFormatOpts{}
63
@@ -216,13 +222,18 @@ type CodeAndName struct {
222
Name string
223
}
224
225
+const (
226
+ prefixOptionName = "prefix"
227
+ numericOptionName = "numeric"
228
+)
229
+
230
var basesCmd = &cmds.Command{
231
Helptext: cmdkit.HelpText{
232
Tagline: "List available multibase encodings.",
233
},
234
Options: []cmdkit.Option{
224
- cmdkit.BoolOption("prefix", "also include the single leter prefixes in addition to the code"),
225
- cmdkit.BoolOption("numeric", "also include numeric codes"),
235
+ cmdkit.BoolOption(prefixOptionName, "also include the single leter prefixes in addition to the code"),
236
+ cmdkit.BoolOption(numericOptionName, "also include numeric codes"),
237
},
238
Run: func(req *cmds.Request, resp cmds.ResponseEmitter, env cmds.Environment) error {
239
var res []CodeAndName
@@ -235,8 +246,8 @@ var basesCmd = &cmds.Command{
246
},
247
Encoders: cmds.EncoderMap{
248
cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, val0 interface{}) error {
238
- prefixes, _ := req.Options["prefix"].(bool)
239
- numeric, _ := req.Options["numeric"].(bool)
249
+ prefixes, _ := req.Options[prefixOptionName].(bool)
250
+ numeric, _ := req.Options[numericOptionName].(bool)
251
val, ok := val0.([]CodeAndName)
252
if !ok {
253
return e.TypeErr(val, val0)
@@ -265,12 +276,16 @@ var basesCmd = &cmds.Command{
276
Type: []CodeAndName{},
277
}
278
279
+const (
280
+ codecsNumericOptionName = "numeric"
281
+)
282
+
283
var codecsCmd = &cmds.Command{
284
Helptext: cmdkit.HelpText{
285
Tagline: "List available CID codecs.",
286
},
287
Options: []cmdkit.Option{
273
- cmdkit.BoolOption("numeric", "also include numeric codes"),
288
+ cmdkit.BoolOption(codecsNumericOptionName, "also include numeric codes"),
289
},
290
Run: func(req *cmds.Request, resp cmds.ResponseEmitter, env cmds.Environment) error {
291
var res []CodeAndName
@@ -283,7 +298,7 @@ var codecsCmd = &cmds.Command{
298
},
299
Encoders: cmds.EncoderMap{
300
cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, val0 interface{}) error {
286
- numeric, _ := req.Options["numeric"].(bool)
301
+ numeric, _ := req.Options[codecsNumericOptionName].(bool)
302
val, ok := val0.([]CodeAndName)
303
if !ok {
304
return e.TypeErr(val, val0)
core/commands/config.go
+9
-4
@@ -25,6 +25,11 @@ type ConfigField struct {
25
Value interface{}
26
}
27
28
+const (
29
+ configBoolOptionName = "bool"
30
+ configJsonOptionName = "json"
31
+)
32
+
33
var ConfigCmd = &cmds.Command{
34
Helptext: cmdkit.HelpText{
35
Tagline: "Get and set ipfs config values.",
@@ -54,8 +59,8 @@ Set the value of the 'Datastore.Path' key:
59
cmdkit.StringArg("value", false, false, "The value to set the config entry to."),
60
},
61
Options: []cmdkit.Option{
57
- cmdkit.BoolOption("bool", "Set a boolean value."),
58
- cmdkit.BoolOption("json", "Parse stringified JSON."),
62
+ cmdkit.BoolOption(configBoolOptionName, "Set a boolean value."),
63
+ cmdkit.BoolOption(configJsonOptionName, "Parse stringified JSON."),
64
},
65
Run: func(req cmds.Request, res cmds.Response) {
66
args := req.Arguments()
@@ -87,7 +92,7 @@ Set the value of the 'Datastore.Path' key:
92
if len(args) == 2 {
93
value := args[1]
94
90
- if parseJson, _, _ := req.Option("json").Bool(); parseJson {
95
+ if parseJson, _, _ := req.Option(configJsonOptionName).Bool(); parseJson {
96
var jsonVal interface{}
97
if err := json.Unmarshal([]byte(value), &jsonVal); err != nil {
98
err = fmt.Errorf("failed to unmarshal json. %s", err)
@@ -96,7 +101,7 @@ Set the value of the 'Datastore.Path' key:
101
}
102
103
output, err = setConfig(r, key, jsonVal)
99
- } else if isbool, _, _ := req.Option("bool").Bool(); isbool {
104
+ } else if isbool, _, _ := req.Option(configBoolOptionName).Bool(); isbool {
105
output, err = setConfig(r, key, value == "true")
106
} else {
107
output, err = setConfig(r, key, value)
core/commands/dht.go
+28
-16
@@ -44,6 +44,10 @@ var DhtCmd = &cmds.Command{
44
},
45
}
46
47
+const (
48
+ dhtVerboseOptionName = "v"
49
+)
50
+
51
var queryDhtCmd = &cmds.Command{
52
Helptext: cmdkit.HelpText{
53
Tagline: "Find the closest Peer IDs to a given Peer ID by querying the DHT.",
@@ -54,7 +58,7 @@ var queryDhtCmd = &cmds.Command{
58
cmdkit.StringArg("peerID", true, true, "The peerID to run the query against."),
59
},
60
Options: []cmdkit.Option{
57
- cmdkit.BoolOption("verbose", "v", "Print extra information."),
61
+ cmdkit.BoolOption("verbose", dhtVerboseOptionName, "Print extra information."),
62
},
63
Run: func(req cmds.Request, res cmds.Response) {
64
n, err := req.InvocContext().GetNode()
@@ -128,7 +132,7 @@ var queryDhtCmd = &cmds.Command{
132
return nil, e.TypeErr(obj, v)
133
}
134
131
- verbose, _, _ := res.Request().Option("v").Bool()
135
+ verbose, _, _ := res.Request().Option(dhtVerboseOptionName).Bool()
136
137
buf := new(bytes.Buffer)
138
printEvent(obj, buf, verbose, pfm)
@@ -139,6 +143,10 @@ var queryDhtCmd = &cmds.Command{
143
Type: notif.QueryEvent{},
144
}
145
146
+const (
147
+ numProvidersOptionName = "num-providers"
148
+)
149
+
150
var findProvidersDhtCmd = &cmds.Command{
151
Helptext: cmdkit.HelpText{
152
Tagline: "Find peers that can provide a specific value, given a key.",
@@ -149,8 +157,8 @@ var findProvidersDhtCmd = &cmds.Command{
157
cmdkit.StringArg("key", true, true, "The key to find providers for."),
158
},
159
Options: []cmdkit.Option{
152
- cmdkit.BoolOption("verbose", "v", "Print extra information."),
153
- cmdkit.IntOption("num-providers", "n", "The number of providers to find.").WithDefault(20),
160
+ cmdkit.BoolOption("verbose", dhtVerboseOptionName, "Print extra information."),
161
+ cmdkit.IntOption(numProvidersOptionName, "n", "The number of providers to find.").WithDefault(20),
162
},
163
Run: func(req cmds.Request, res cmds.Response) {
164
n, err := req.InvocContext().GetNode()
@@ -164,7 +172,7 @@ var findProvidersDhtCmd = &cmds.Command{
172
return
173
}
174
167
- numProviders, _, err := res.Request().Option("num-providers").Int()
175
+ numProviders, _, err := res.Request().Option(numProvidersOptionName).Int()
176
if err != nil {
177
res.SetError(err, cmdkit.ErrNormal)
178
return
@@ -232,7 +240,7 @@ var findProvidersDhtCmd = &cmds.Command{
240
}
241
242
return func(res cmds.Response) (io.Reader, error) {
235
- verbose, _, _ := res.Request().Option("v").Bool()
243
+ verbose, _, _ := res.Request().Option(dhtVerboseOptionName).Bool()
244
v, err := unwrapOutput(res.Output())
245
if err != nil {
246
return nil, err
@@ -252,6 +260,10 @@ var findProvidersDhtCmd = &cmds.Command{
260
Type: notif.QueryEvent{},
261
}
262
263
+const (
264
+ recursiveOptionName = "recursive"
265
+)
266
+
267
var provideRefDhtCmd = &cmds.Command{
268
Helptext: cmdkit.HelpText{
269
Tagline: "Announce to the network that you are providing given values.",
@@ -261,8 +273,8 @@ var provideRefDhtCmd = &cmds.Command{
273
cmdkit.StringArg("key", true, true, "The key[s] to send provide records for.").EnableStdin(),
274
},
275
Options: []cmdkit.Option{
264
- cmdkit.BoolOption("verbose", "v", "Print extra information."),
265
- cmdkit.BoolOption("recursive", "r", "Recursively provide entire graph."),
276
+ cmdkit.BoolOption("verbose", dhtVerboseOptionName, "Print extra information."),
277
+ cmdkit.BoolOption(recursiveOptionName, "r", "Recursively provide entire graph."),
278
},
279
Run: func(req cmds.Request, res cmds.Response) {
280
n, err := req.InvocContext().GetNode()
@@ -281,7 +293,7 @@ var provideRefDhtCmd = &cmds.Command{
293
return
294
}
295
284
- rec, _, _ := req.Option("recursive").Bool()
296
+ rec, _, _ := req.Option(recursiveOptionName).Bool()
297
298
var cids []cid.Cid
299
for _, arg := range req.Arguments() {
@@ -349,7 +361,7 @@ var provideRefDhtCmd = &cmds.Command{
361
}
362
363
return func(res cmds.Response) (io.Reader, error) {
352
- verbose, _, _ := res.Request().Option("v").Bool()
364
+ verbose, _, _ := res.Request().Option(dhtVerboseOptionName).Bool()
365
v, err := unwrapOutput(res.Output())
366
if err != nil {
367
return nil, err
@@ -414,7 +426,7 @@ var findPeerDhtCmd = &cmds.Command{
426
cmdkit.StringArg("peerID", true, true, "The ID of the peer to search for."),
427
},
428
Options: []cmdkit.Option{
417
- cmdkit.BoolOption("verbose", "v", "Print extra information."),
429
+ cmdkit.BoolOption("verbose", dhtVerboseOptionName, "Print extra information."),
430
},
431
Run: func(req cmds.Request, res cmds.Response) {
432
n, err := req.InvocContext().GetNode()
@@ -480,7 +492,7 @@ var findPeerDhtCmd = &cmds.Command{
492
}
493
494
return func(res cmds.Response) (io.Reader, error) {
483
- verbose, _, _ := res.Request().Option("v").Bool()
495
+ verbose, _, _ := res.Request().Option(dhtVerboseOptionName).Bool()
496
v, err := unwrapOutput(res.Output())
497
if err != nil {
498
return nil, err
@@ -519,7 +531,7 @@ Different key types can specify other 'best' rules.
531
cmdkit.StringArg("key", true, true, "The key to find a value for."),
532
},
533
Options: []cmdkit.Option{
522
- cmdkit.BoolOption("verbose", "v", "Print extra information."),
534
+ cmdkit.BoolOption("verbose", dhtVerboseOptionName, "Print extra information."),
535
},
536
Run: func(req cmds.Request, res cmds.Response) {
537
n, err := req.InvocContext().GetNode()
@@ -584,7 +596,7 @@ Different key types can specify other 'best' rules.
596
}
597
598
return func(res cmds.Response) (io.Reader, error) {
587
- verbose, _, _ := res.Request().Option("v").Bool()
599
+ verbose, _, _ := res.Request().Option(dhtVerboseOptionName).Bool()
600
v, err := unwrapOutput(res.Output())
601
if err != nil {
602
return nil, err
@@ -633,7 +645,7 @@ NOTE: A value may not exceed 2048 bytes.
645
cmdkit.StringArg("value", true, false, "The value to store.").EnableStdin(),
646
},
647
Options: []cmdkit.Option{
636
- cmdkit.BoolOption("verbose", "v", "Print extra information."),
648
+ cmdkit.BoolOption("verbose", dhtVerboseOptionName, "Print extra information."),
649
},
650
Run: func(req cmds.Request, res cmds.Response) {
651
n, err := req.InvocContext().GetNode()
@@ -697,7 +709,7 @@ NOTE: A value may not exceed 2048 bytes.
709
}
710
711
return func(res cmds.Response) (io.Reader, error) {
700
- verbose, _, _ := res.Request().Option("v").Bool()
712
+ verbose, _, _ := res.Request().Option(dhtVerboseOptionName).Bool()
713
v, err := unwrapOutput(res.Output())
714
if err != nil {
715
return nil, err
core/commands/dns.go
+6
-2
@@ -13,6 +13,10 @@ import (
13
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
14
)
15
16
+const (
17
+ dnsRecursiveOptionName = "recursive"
18
+)
19
+
20
var DNSCmd = &cmds.Command{
21
Helptext: cmdkit.HelpText{
22
Tagline: "Resolve DNS links.",
@@ -51,11 +55,11 @@ The resolver can recursively resolve:
55
cmdkit.StringArg("domain-name", true, false, "The domain-name name to resolve.").EnableStdin(),
56
},
57
Options: []cmdkit.Option{
54
- cmdkit.BoolOption("recursive", "r", "Resolve until the result is not a DNS link."),
58
+ cmdkit.BoolOption(dnsRecursiveOptionName, "r", "Resolve until the result is not a DNS link."),
59
},
60
Run: func(req cmds.Request, res cmds.Response) {
61
58
- recursive, _, _ := req.Option("recursive").Bool()
62
+ recursive, _, _ := req.Option(dnsRecursiveOptionName).Bool()
63
name := req.Arguments()[0]
64
resolver := namesys.NewDNSResolver()
65
core/commands/files.go
+69
-41
@@ -69,8 +69,13 @@ operations.
69
},
70
}
71
72
-var cidVersionOption = cmdkit.IntOption("cid-version", "cid-ver", "Cid version to use. (experimental)")
73
-var hashOption = cmdkit.StringOption("hash", "Hash function to use. Will set Cid version to 1 if used. (experimental)")
72
+const (
73
+ filesCidVersionOptionName = "cid-version"
74
+ filesHashOptionName = "hash"
75
+)
76
+
77
+var cidVersionOption = cmdkit.IntOption(filesCidVersionOptionName, "cid-ver", "Cid version to use. (experimental)")
78
+var hashOption = cmdkit.StringOption(filesHashOptionName, "Hash function to use. Will set Cid version to 1 if used. (experimental)")
79
80
var errFormat = errors.New("format was set by multiple options. Only one format option is allowed")
81
@@ -85,11 +90,16 @@ type statOutput struct {
90
SizeLocal uint64 `json:",omitempty"`
91
}
92
88
-const defaultStatFormat = `<hash>
93
+const (
94
+ defaultStatFormat = `<hash>
95
Size: <size>
96
CumulativeSize: <cumulsize>
97
ChildBlocks: <childs>
98
Type: <type>`
99
+ filesFormatOptionName = "format"
100
+ filesSizeOptionName = "size"
101
+ filesWithLocalOptionName = "with-local"
102
+)
103
104
var filesStatCmd = &cmds.Command{
105
Helptext: cmdkit.HelpText{
@@ -100,11 +110,11 @@ var filesStatCmd = &cmds.Command{
110
cmdkit.StringArg("path", true, false, "Path to node to stat."),
111
},
112
Options: []cmdkit.Option{
103
- cmdkit.StringOption("format", "Print statistics in given format. Allowed tokens: "+
113
+ cmdkit.StringOption(filesFormatOptionName, "Print statistics in given format. Allowed tokens: "+
114
"<hash> <size> <cumulsize> <type> <childs>. Conflicts with other format options.").WithDefault(defaultStatFormat),
105
- cmdkit.BoolOption("hash", "Print only hash. Implies '--format=<hash>'. Conflicts with other format options."),
106
- cmdkit.BoolOption("size", "Print only size. Implies '--format=<cumulsize>'. Conflicts with other format options."),
107
- cmdkit.BoolOption("with-local", "Compute the amount of the dag that is local, and if possible the total size"),
115
+ cmdkit.BoolOption(filesHashOptionName, "Print only hash. Implies '--format=<hash>'. Conflicts with other format options."),
116
+ cmdkit.BoolOption(filesSizeOptionName, "Print only size. Implies '--format=<cumulsize>'. Conflicts with other format options."),
117
+ cmdkit.BoolOption(filesWithLocalOptionName, "Compute the amount of the dag that is local, and if possible the total size"),
118
},
119
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
120
@@ -128,7 +138,7 @@ var filesStatCmd = &cmds.Command{
138
return err
139
}
140
131
- withLocal, _ := req.Options["with-local"].(bool)
141
+ withLocal, _ := req.Options[filesWithLocalOptionName].(bool)
142
143
var dagserv ipld.DAGService
144
if withLocal {
@@ -199,9 +209,9 @@ func moreThanOne(a, b, c bool) bool {
209
210
func statGetFormatOptions(req *cmds.Request) (string, error) {
211
202
- hash, _ := req.Options["hash"].(bool)
203
- size, _ := req.Options["size"].(bool)
204
- format, _ := req.Options["format"].(string)
212
+ hash, _ := req.Options[filesHashOptionName].(bool)
213
+ size, _ := req.Options[filesSizeOptionName].(bool)
214
+ format, _ := req.Options[filesFormatOptionName].(string)
215
216
if moreThanOne(hash, size, format != defaultStatFormat) {
217
return "", errFormat
@@ -380,6 +390,11 @@ type filesLsOutput struct {
390
Entries []mfs.NodeListing
391
}
392
393
+const (
394
+ longOptionName = "l"
395
+ dontSortOptionName = "U"
396
+)
397
+
398
var filesLsCmd = &oldcmds.Command{
399
Helptext: cmdkit.HelpText{
400
Tagline: "List directories in the local mutable namespace.",
@@ -405,8 +420,8 @@ Examples:
420
cmdkit.StringArg("path", false, false, "Path to show listing for. Defaults to '/'."),
421
},
422
Options: []cmdkit.Option{
408
- cmdkit.BoolOption("l", "Use long listing format."),
409
- cmdkit.BoolOption("U", "Do not sort; list entries in directory order."),
423
+ cmdkit.BoolOption(longOptionName, "Use long listing format."),
424
+ cmdkit.BoolOption(dontSortOptionName, "Do not sort; list entries in directory order."),
425
},
426
Run: func(req oldcmds.Request, res oldcmds.Response) {
427
var arg string
@@ -435,7 +450,7 @@ Examples:
450
return
451
}
452
438
- long, _, _ := req.Option("l").Bool()
453
+ long, _, _ := req.Option(longOptionName).Bool()
454
455
switch fsn := fsn.(type) {
456
case *mfs.Directory:
@@ -502,14 +517,14 @@ Examples:
517
518
buf := new(bytes.Buffer)
519
505
- noSort, _, _ := res.Request().Option("U").Bool()
520
+ noSort, _, _ := res.Request().Option(dontSortOptionName).Bool()
521
if !noSort {
522
sort.Slice(out.Entries, func(i, j int) bool {
523
return strings.Compare(out.Entries[i].Name, out.Entries[j].Name) < 0
524
})
525
}
526
512
- long, _, _ := res.Request().Option("l").Bool()
527
+ long, _, _ := res.Request().Option(longOptionName).Bool()
528
for _, o := range out.Entries {
529
if long {
530
fmt.Fprintf(buf, "%s\t%s\t%d\n", o.Name, o.Hash, o.Size)
@@ -523,6 +538,11 @@ Examples:
538
Type: filesLsOutput{},
539
}
540
541
+const (
542
+ filesOffsetOptionName = "offset"
543
+ filesCountOptionName = "count"
544
+)
545
+
546
var filesReadCmd = &oldcmds.Command{
547
Helptext: cmdkit.HelpText{
548
Tagline: "Read a file in a given mfs.",
@@ -541,8 +561,8 @@ Examples:
561
cmdkit.StringArg("path", true, false, "Path to file to be read."),
562
},
563
Options: []cmdkit.Option{
544
- cmdkit.IntOption("offset", "o", "Byte offset to begin reading from."),
545
- cmdkit.IntOption("count", "n", "Maximum number of bytes to read."),
564
+ cmdkit.IntOption(filesOffsetOptionName, "o", "Byte offset to begin reading from."),
565
+ cmdkit.IntOption(filesCountOptionName, "n", "Maximum number of bytes to read."),
566
},
567
Run: func(req oldcmds.Request, res oldcmds.Response) {
568
n, err := req.InvocContext().GetNode()
@@ -577,7 +597,7 @@ Examples:
597
598
defer rfd.Close()
599
580
- offset, _, err := req.Option("offset").Int()
600
+ offset, _, err := req.Option(offsetOptionName).Int()
601
if err != nil {
602
res.SetError(err, cmdkit.ErrNormal)
603
return
@@ -605,7 +625,7 @@ Examples:
625
}
626
627
var r io.Reader = &contextReaderWrapper{R: rfd, ctx: req.Context()}
608
- count, found, err := req.Option("count").Int()
628
+ count, found, err := req.Option(filesCountOptionName).Int()
629
if err != nil {
630
res.SetError(err, cmdkit.ErrNormal)
631
return
@@ -680,6 +700,14 @@ Example:
700
},
701
}
702
703
+const (
704
+ filesCreateOptionName = "create"
705
+ filesParentsOptionName = "parents"
706
+ filesTruncateOptionName = "truncate"
707
+ filesRawLeavesOptionName = "raw-leaves"
708
+ filesFlushOptionName = "flush"
709
+)
710
+
711
var filesWriteCmd = &cmds.Command{
712
Helptext: cmdkit.HelpText{
713
Tagline: "Write to a mutable file in a given filesystem.",
@@ -719,12 +747,12 @@ stat' on the file or any of its ancestors.
747
cmdkit.FileArg("data", true, false, "Data to write.").EnableStdin(),
748
},
749
Options: []cmdkit.Option{
722
- cmdkit.IntOption("offset", "o", "Byte offset to begin writing at."),
723
- cmdkit.BoolOption("create", "e", "Create the file if it does not exist."),
724
- cmdkit.BoolOption("parents", "p", "Make parent directories as needed."),
725
- cmdkit.BoolOption("truncate", "t", "Truncate the file to size zero before writing."),
726
- cmdkit.IntOption("count", "n", "Maximum number of bytes to read."),
727
- cmdkit.BoolOption("raw-leaves", "Use raw blocks for newly created leaf nodes. (experimental)"),
750
+ cmdkit.IntOption(filesOffsetOptionName, "o", "Byte offset to begin writing at."),
751
+ cmdkit.BoolOption(filesCreateOptionName, "e", "Create the file if it does not exist."),
752
+ cmdkit.BoolOption(filesParentsOptionName, "p", "Make parent directories as needed."),
753
+ cmdkit.BoolOption(filesTruncateOptionName, "t", "Truncate the file to size zero before writing."),
754
+ cmdkit.IntOption(filesCountOptionName, "n", "Maximum number of bytes to read."),
755
+ cmdkit.BoolOption(filesRawLeavesOptionName, "Use raw blocks for newly created leaf nodes. (experimental)"),
756
cidVersionOption,
757
hashOption,
758
},
@@ -734,11 +762,11 @@ stat' on the file or any of its ancestors.
762
return err
763
}
764
737
- create, _ := req.Options["create"].(bool)
738
- mkParents, _ := req.Options["parents"].(bool)
739
- trunc, _ := req.Options["truncate"].(bool)
740
- flush, _ := req.Options["flush"].(bool)
741
- rawLeaves, rawLeavesDef := req.Options["raw-leaves"].(bool)
765
+ create, _ := req.Options[filesCreateOptionName].(bool)
766
+ mkParents, _ := req.Options[filesParentsOptionName].(bool)
767
+ trunc, _ := req.Options[filesTruncateOptionName].(bool)
768
+ flush, _ := req.Options[filesFlushOptionName].(bool)
769
+ rawLeaves, rawLeavesDef := req.Options[filesRawLeavesOptionName].(bool)
770
771
prefix, err := getPrefixNew(req)
772
if err != nil {
@@ -750,7 +778,7 @@ stat' on the file or any of its ancestors.
778
return err
779
}
780
753
- offset, _ := req.Options["offset"].(int)
781
+ offset, _ := req.Options[filesOffsetOptionName].(int)
782
if offset < 0 {
783
return fmt.Errorf("cannot have negative write offset")
784
}
@@ -792,7 +820,7 @@ stat' on the file or any of its ancestors.
820
}
821
}
822
795
- count, countfound := req.Options["count"].(int)
823
+ count, countfound := req.Options[filesCountOptionName].(int)
824
if countfound && count < 0 {
825
return fmt.Errorf("cannot have negative byte count")
826
}
@@ -840,7 +868,7 @@ Examples:
868
cmdkit.StringArg("path", true, false, "Path to dir to make."),
869
},
870
Options: []cmdkit.Option{
843
- cmdkit.BoolOption("parents", "p", "No error if existing, make parent directories as needed."),
871
+ cmdkit.BoolOption(filesParentsOptionName, "p", "No error if existing, make parent directories as needed."),
872
cidVersionOption,
873
hashOption,
874
},
@@ -851,14 +879,14 @@ Examples:
879
return
880
}
881
854
- dashp, _, _ := req.Option("parents").Bool()
882
+ dashp, _, _ := req.Option(filesParentsOptionName).Bool()
883
dirtomake, err := checkPath(req.Arguments()[0])
884
if err != nil {
885
res.SetError(err, cmdkit.ErrNormal)
886
return
887
}
888
861
- flush, _, _ := req.Option("flush").Bool()
889
+ flush, _, _ := req.Option(filesFlushOptionName).Bool()
890
891
prefix, err := getPrefix(req)
892
if err != nil {
@@ -940,7 +968,7 @@ Change the cid version or hash function of the root node of a given path.
968
path = req.Arguments()[0]
969
}
970
943
- flush, _, _ := req.Option("flush").Bool()
971
+ flush, _, _ := req.Option(filesFlushOptionName).Bool()
972
973
prefix, err := getPrefix(req)
974
if err != nil {
@@ -1096,8 +1124,8 @@ Remove files or directories.
1124
}
1125
1126
func getPrefixNew(req *cmds.Request) (cid.Builder, error) {
1099
- cidVer, cidVerSet := req.Options["cid-version"].(int)
1100
- hashFunStr, hashFunSet := req.Options["hash"].(string)
1127
+ cidVer, cidVerSet := req.Options[filesCidVersionOptionName].(int)
1128
+ hashFunStr, hashFunSet := req.Options[filesHashOptionName].(string)
1129
1130
if !cidVerSet && !hashFunSet {
1131
return nil, nil
@@ -1125,8 +1153,8 @@ func getPrefixNew(req *cmds.Request) (cid.Builder, error) {
1153
}
1154
1155
func getPrefix(req oldcmds.Request) (cid.Builder, error) {
1128
- cidVer, cidVerSet, _ := req.Option("cid-version").Int()
1129
- hashFunStr, hashFunSet, _ := req.Option("hash").String()
1156
+ cidVer, cidVerSet, _ := req.Option(filesCidVersionOptionName).Int()
1157
+ hashFunStr, hashFunSet, _ := req.Option(filesHashOptionName).String()
1158
1159
if !cidVerSet && !hashFunSet {
1160
return nil, nil
core/commands/filestore.go
+8
-4
@@ -28,6 +28,10 @@ var FileStoreCmd = &cmds.Command{
28
},
29
}
30
31
+const (
32
+ fileOrderOptionName = "file-order"
33
+)
34
+
35
var lsFileStore = &cmds.Command{
36
Helptext: cmdkit.HelpText{
37
Tagline: "List objects in filestore.",
@@ -46,7 +50,7 @@ The output is:
50
cmdkit.StringArg("obj", false, true, "Cid of objects to list."),
51
},
52
Options: []cmdkit.Option{
49
- cmdkit.BoolOption("file-order", "sort the results based on the path of the backing file"),
53
+ cmdkit.BoolOption(fileOrderOptionName, "sort the results based on the path of the backing file"),
54
},
55
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
56
_, fs, err := getFilestore(env)
@@ -62,7 +66,7 @@ The output is:
66
return res.Emit(out)
67
}
68
65
- fileOrder, _ := req.Options["file-order"].(bool)
69
+ fileOrder, _ := req.Options[fileOrderOptionName].(bool)
70
next, err := filestore.ListAll(fs, fileOrder)
71
if err != nil {
72
return err
@@ -112,7 +116,7 @@ For ERROR entries the error will also be printed to stderr.
116
cmdkit.StringArg("obj", false, true, "Cid of objects to verify."),
117
},
118
Options: []cmdkit.Option{
115
- cmdkit.BoolOption("file-order", "verify the objects based on the order of the backing file"),
119
+ cmdkit.BoolOption(fileOrderOptionName, "verify the objects based on the order of the backing file"),
120
},
121
Run: func(req oldCmds.Request, res oldCmds.Response) {
122
_, fs, err := getFilestore(req.InvocContext())
@@ -127,7 +131,7 @@ For ERROR entries the error will also be printed to stderr.
131
})
132
res.SetOutput(out)
133
} else {
130
- fileOrder, _, _ := req.Option("file-order").Bool()
134
+ fileOrder, _, _ := req.Option(fileOrderOptionName).Bool()
135
next, err := filestore.VerifyAll(fs, fileOrder)
136
if err != nil {
137
res.SetError(err, cmdkit.ErrNormal)
core/commands/get.go
+16
-9
@@ -24,6 +24,13 @@ import (
24
25
var ErrInvalidCompressionLevel = errors.New("compression level must be between 1 and 9")
26
27
+const (
28
+ outputOptionName = "output"
29
+ archiveOptionName = "archive"
30
+ compressOptionName = "compress"
31
+ compressionLevelOptionName = "compression-level"
32
+)
33
+
34
var GetCmd = &cmds.Command{
35
Helptext: cmdkit.HelpText{
36
Tagline: "Download IPFS objects.",
@@ -44,10 +51,10 @@ may also specify the level of compression by specifying '-l=<1-9>'.
51
cmdkit.StringArg("ipfs-path", true, false, "The path to the IPFS object(s) to be outputted.").EnableStdin(),
52
},
53
Options: []cmdkit.Option{
47
- cmdkit.StringOption("output", "o", "The path where the output should be stored."),
48
- cmdkit.BoolOption("archive", "a", "Output a TAR archive."),
49
- cmdkit.BoolOption("compress", "C", "Compress the output with GZIP compression."),
50
- cmdkit.IntOption("compression-level", "l", "The level of compression (1-9)."),
54
+ cmdkit.StringOption(outputOptionName, "o", "The path where the output should be stored."),
55
+ cmdkit.BoolOption(archiveOptionName, "a", "Output a TAR archive."),
56
+ cmdkit.BoolOption(compressOptionName, "C", "Compress the output with GZIP compression."),
57
+ cmdkit.IntOption(compressionLevelOptionName, "l", "The level of compression (1-9)."),
58
},
59
PreRun: func(req *cmds.Request, env cmds.Environment) error {
60
_, err := getCompressOptions(req)
@@ -84,7 +91,7 @@ may also specify the level of compression by specifying '-l=<1-9>'.
91
return err
92
}
93
87
- archive, _ := req.Options["archive"].(bool)
94
+ archive, _ := req.Options[archiveOptionName].(bool)
95
reader, err := uarchive.DagArchive(ctx, dn, p.String(), node.DAG, archive, cmplvl)
96
if err != nil {
97
return err
@@ -113,7 +120,7 @@ may also specify the level of compression by specifying '-l=<1-9>'.
120
return err
121
}
122
116
- archive, _ := req.Options["archive"].(bool)
123
+ archive, _ := req.Options[archiveOptionName].(bool)
124
125
gw := getWriter{
126
Out: os.Stdout,
@@ -165,7 +172,7 @@ func makeProgressBar(out io.Writer, l int64) *pb.ProgressBar {
172
}
173
174
func getOutPath(req *cmds.Request) string {
168
- outPath, _ := req.Options["output"].(string)
175
+ outPath, _ := req.Options[outputOptionName].(string)
176
if outPath == "" {
177
trimmed := strings.TrimRight(req.Arguments[0], "/")
178
_, outPath = filepath.Split(trimmed)
@@ -233,8 +240,8 @@ func (gw *getWriter) writeExtracted(r io.Reader, fpath string) error {
240
}
241
242
func getCompressOptions(req *cmds.Request) (int, error) {
236
- cmprs, _ := req.Options["compress"].(bool)
237
- cmplvl, cmplvlFound := req.Options["compression-level"].(int)
243
+ cmprs, _ := req.Options[compressOptionName].(bool)
244
+ cmplvl, cmplvlFound := req.Options[compressionLevelOptionName].(int)
245
switch {
246
case !cmprs:
247
return gzip.NoCompression, nil
core/commands/id.go
+6
-2
@@ -37,6 +37,10 @@ type IdOutput struct {
37
ProtocolVersion string
38
}
39
40
+const (
41
+ formatOptionName = "format"
42
+)
43
+
44
var IDCmd = &cmds.Command{
45
Helptext: cmdkit.HelpText{
46
Tagline: "Show ipfs node id info.",
@@ -60,7 +64,7 @@ EXAMPLE:
64
cmdkit.StringArg("peerid", false, false, "Peer.ID of node to look up."),
65
},
66
Options: []cmdkit.Option{
63
- cmdkit.StringOption("format", "f", "Optional output format."),
67
+ cmdkit.StringOption(formatOptionName, "f", "Optional output format."),
68
},
69
Run: func(req cmds.Request, res cmds.Response) {
70
node, err := req.InvocContext().GetNode()
@@ -126,7 +130,7 @@ EXAMPLE:
130
return nil, e.TypeErr(val, v)
131
}
132
129
- format, found, err := res.Request().Option("format").String()
133
+ format, found, err := res.Request().Option(formatOptionName).String()
134
if err != nil {
135
return nil, err
136
}
core/commands/keystore.go
+15
-6
@@ -55,13 +55,18 @@ type KeyRenameOutput struct {
55
Overwrite bool
56
}
57
58
+const (
59
+ keyStoreTypeOptionName = "type"
60
+ keyStoreSizeOptionName = "size"
61
+)
62
+
63
var keyGenCmd = &cmds.Command{
64
Helptext: cmdkit.HelpText{
65
Tagline: "Create a new keypair",
66
},
67
Options: []cmdkit.Option{
63
- cmdkit.StringOption("type", "t", "type of the key to create [rsa, ed25519]"),
64
- cmdkit.IntOption("size", "s", "size of the key to generate"),
68
+ cmdkit.StringOption(keyStoreTypeOptionName, "t", "type of the key to create [rsa, ed25519]"),
69
+ cmdkit.IntOption(keyStoreSizeOptionName, "s", "size of the key to generate"),
70
},
71
Arguments: []cmdkit.Argument{
72
cmdkit.StringArg("name", true, false, "name of key to create"),
@@ -72,7 +77,7 @@ var keyGenCmd = &cmds.Command{
77
return err
78
}
79
75
- typ, f := req.Options["type"].(string)
80
+ typ, f := req.Options[keyStoreTypeOptionName].(string)
81
if !f {
82
return fmt.Errorf("please specify a key type with --type")
83
}
@@ -84,7 +89,7 @@ var keyGenCmd = &cmds.Command{
89
90
opts := []options.KeyGenerateOption{options.Key.Type(typ)}
91
87
- size, sizefound := req.Options["size"].(int)
92
+ size, sizefound := req.Options[keyStoreSizeOptionName].(int)
93
if sizefound {
94
opts = append(opts, options.Key.Size(size))
95
}
@@ -146,6 +151,10 @@ var keyListCmd = &cmds.Command{
151
Type: KeyOutputList{},
152
}
153
154
+const (
155
+ keyStoreForceOptionName = "force"
156
+)
157
+
158
var keyRenameCmd = &cmds.Command{
159
Helptext: cmdkit.HelpText{
160
Tagline: "Rename a keypair",
@@ -155,7 +164,7 @@ var keyRenameCmd = &cmds.Command{
164
cmdkit.StringArg("newName", true, false, "new name of the key"),
165
},
166
Options: []cmdkit.Option{
158
- cmdkit.BoolOption("force", "f", "Allow to overwrite an existing key."),
167
+ cmdkit.BoolOption(keyStoreForceOptionName, "f", "Allow to overwrite an existing key."),
168
},
169
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
170
api, err := cmdenv.GetApi(env)
@@ -165,7 +174,7 @@ var keyRenameCmd = &cmds.Command{
174
175
name := req.Arguments[0]
176
newName := req.Arguments[1]
168
- force, _ := req.Options["force"].(bool)
177
+ force, _ := req.Options[keyStoreForceOptionName].(bool)
178
179
key, overwritten, err := api.Key().Rename(req.Context, name, newName, options.Key.Force(force))
180
if err != nil {
core/commands/ls.go
+10
-5
@@ -36,6 +36,11 @@ type LsOutput struct {
36
Objects []LsObject
37
}
38
39
+const (
40
+ lsHeadersOptionNameTime = "headers"
41
+ lsResolveTypeOptionName = "resolve-type"
42
+)
43
+
44
var LsCmd = &cmds.Command{
45
Helptext: cmdkit.HelpText{
46
Tagline: "List directory contents for Unix filesystem objects.",
@@ -53,8 +58,8 @@ The JSON output contains type information.
58
cmdkit.StringArg("ipfs-path", true, true, "The path to the IPFS object(s) to list links from.").EnableStdin(),
59
},
60
Options: []cmdkit.Option{
56
- cmdkit.BoolOption("headers", "v", "Print table headers (Hash, Size, Name)."),
57
- cmdkit.BoolOption("resolve-type", "Resolve linked objects to find out their types.").WithDefault(true),
61
+ cmdkit.BoolOption(lsHeadersOptionNameTime, "v", "Print table headers (Hash, Size, Name)."),
62
+ cmdkit.BoolOption(lsResolveTypeOptionName, "Resolve linked objects to find out their types.").WithDefault(true),
63
},
64
Run: func(req cmds.Request, res cmds.Response) {
65
nd, err := req.InvocContext().GetNode()
@@ -70,12 +75,12 @@ The JSON output contains type information.
75
}
76
77
// get options early -> exit early in case of error
73
- if _, _, err := req.Option("headers").Bool(); err != nil {
78
+ if _, _, err := req.Option(lsHeadersOptionNameTime).Bool(); err != nil {
79
res.SetError(err, cmdkit.ErrNormal)
80
return
81
}
82
78
- resolve, _, err := req.Option("resolve-type").Bool()
83
+ resolve, _, err := req.Option(lsResolveTypeOptionName).Bool()
84
if err != nil {
85
res.SetError(err, cmdkit.ErrNormal)
86
return
@@ -178,7 +183,7 @@ The JSON output contains type information.
183
return nil, err
184
}
185
181
- headers, _, _ := res.Request().Option("headers").Bool()
186
+ headers, _, _ := res.Request().Option(lsHeadersOptionNameTime).Bool()
187
output, ok := v.(*LsOutput)
188
if !ok {
189
return nil, e.TypeErr(output, v)
core/commands/p2p.go
+25
-18
@@ -53,10 +53,6 @@ type P2PStreamsOutput struct {
53
54
const (
55
allowCustomProtocolOptionName = "allow-custom-protocol"
56
- allOptionName = "all"
57
- protocolOptionName = "protocol"
58
- listenAddressOptionName = "listen-address"
59
- targetAddressOptionName = "target-address"
56
)
57
58
var resolveTimeout = 10 * time.Second
@@ -258,12 +254,16 @@ func forwardLocal(ctx context.Context, p *p2p.P2P, ps pstore.Peerstore, proto pr
254
return err
255
}
256
257
+const (
258
+ p2pHeadersOptionName = "headers"
259
+)
260
+
261
var p2pLsCmd = &cmds.Command{
262
Helptext: cmdkit.HelpText{
263
Tagline: "List active p2p listeners.",
264
},
265
Options: []cmdkit.Option{
266
- cmdkit.BoolOption("headers", "v", "Print table headers (Protocol, Listen, Target)."),
266
+ cmdkit.BoolOption(p2pHeadersOptionName, "v", "Print table headers (Protocol, Listen, Target)."),
267
},
268
Run: func(req cmds.Request, res cmds.Response) {
269
n, err := p2pGetNode(req)
@@ -304,7 +304,7 @@ var p2pLsCmd = &cmds.Command{
304
return nil, err
305
}
306
307
- headers, _, _ := res.Request().Option("headers").Bool()
307
+ headers, _, _ := res.Request().Option(p2pHeadersOptionName).Bool()
308
list := v.(*P2PLsOutput)
309
buf := new(bytes.Buffer)
310
w := tabwriter.NewWriter(buf, 1, 2, 1, ' ', 0)
@@ -322,15 +322,22 @@ var p2pLsCmd = &cmds.Command{
322
},
323
}
324
325
+const (
326
+ p2pAllOptionName = "all"
327
+ p2pProtocolOptionName = "protocol"
328
+ p2pListenAddressOptionName = "listen-address"
329
+ p2pTargetAddressOptionName = "target-address"
330
+)
331
+
332
var p2pCloseCmd = &cmds.Command{
333
Helptext: cmdkit.HelpText{
334
Tagline: "Stop listening for new connections to forward.",
335
},
336
Options: []cmdkit.Option{
330
- cmdkit.BoolOption(allOptionName, "a", "Close all listeners."),
331
- cmdkit.StringOption(protocolOptionName, "p", "Match protocol name"),
332
- cmdkit.StringOption(listenAddressOptionName, "l", "Match listen address"),
333
- cmdkit.StringOption(targetAddressOptionName, "t", "Match target address"),
337
+ cmdkit.BoolOption(p2pAllOptionName, "a", "Close all listeners."),
338
+ cmdkit.StringOption(p2pProtocolOptionName, "p", "Match protocol name"),
339
+ cmdkit.StringOption(p2pListenAddressOptionName, "l", "Match listen address"),
340
+ cmdkit.StringOption(p2pTargetAddressOptionName, "t", "Match target address"),
341
},
342
Run: func(req cmds.Request, res cmds.Response) {
343
n, err := p2pGetNode(req)
@@ -339,10 +346,10 @@ var p2pCloseCmd = &cmds.Command{
346
return
347
}
348
342
- closeAll, _, _ := req.Option(allOptionName).Bool()
343
- protoOpt, p, _ := req.Option(protocolOptionName).String()
344
- listenOpt, l, _ := req.Option(listenAddressOptionName).String()
345
- targetOpt, t, _ := req.Option(targetAddressOptionName).String()
349
+ closeAll, _, _ := req.Option(p2pAllOptionName).Bool()
350
+ protoOpt, p, _ := req.Option(p2pProtocolOptionName).String()
351
+ listenOpt, l, _ := req.Option(p2pListenAddressOptionName).String()
352
+ targetOpt, t, _ := req.Option(p2pTargetAddressOptionName).String()
353
354
proto := protocol.ID(protoOpt)
355
@@ -428,7 +435,7 @@ var p2pStreamLsCmd = &cmds.Command{
435
Tagline: "List active p2p streams.",
436
},
437
Options: []cmdkit.Option{
431
- cmdkit.BoolOption("headers", "v", "Print table headers (ID, Protocol, Local, Remote)."),
438
+ cmdkit.BoolOption(p2pHeadersOptionName, "v", "Print table headers (ID, Protocol, Local, Remote)."),
439
},
440
Run: func(req cmds.Request, res cmds.Response) {
441
n, err := p2pGetNode(req)
@@ -462,7 +469,7 @@ var p2pStreamLsCmd = &cmds.Command{
469
return nil, err
470
}
471
465
- headers, _, _ := res.Request().Option("headers").Bool()
472
+ headers, _, _ := res.Request().Option(p2pHeadersOptionName).Bool()
473
list := v.(*P2PStreamsOutput)
474
buf := new(bytes.Buffer)
475
w := tabwriter.NewWriter(buf, 1, 2, 1, ' ', 0)
@@ -488,7 +495,7 @@ var p2pStreamCloseCmd = &cmds.Command{
495
cmdkit.StringArg("id", false, false, "Stream identifier"),
496
},
497
Options: []cmdkit.Option{
491
- cmdkit.BoolOption("all", "a", "Close all streams."),
498
+ cmdkit.BoolOption(p2pAllOptionName, "a", "Close all streams."),
499
},
500
Run: func(req cmds.Request, res cmds.Response) {
501
res.SetOutput(nil)
@@ -499,7 +506,7 @@ var p2pStreamCloseCmd = &cmds.Command{
506
return
507
}
508
502
- closeAll, _, _ := req.Option("all").Bool()
509
+ closeAll, _, _ := req.Option(p2pAllOptionName).Bool()
510
var handlerID uint64
511
512
if !closeAll {
core/commands/pin.go
+35
-17
@@ -46,6 +46,11 @@ type AddPinOutput struct {
46
Progress int `json:",omitempty"`
47
}
48
49
+const (
50
+ pinRecursiveOptionName = "recursive"
51
+ pinProgressOptionName = "progress"
52
+)
53
+
54
var addPinCmd = &cmds.Command{
55
Helptext: cmdkit.HelpText{
56
Tagline: "Pin objects to local storage.",
@@ -56,8 +61,8 @@ var addPinCmd = &cmds.Command{
61
cmdkit.StringArg("ipfs-path", true, true, "Path to object(s) to be pinned.").EnableStdin(),
62
},
63
Options: []cmdkit.Option{
59
- cmdkit.BoolOption("recursive", "r", "Recursively pin the object linked to by the specified object(s).").WithDefault(true),
60
- cmdkit.BoolOption("progress", "Show progress"),
64
+ cmdkit.BoolOption(pinRecursiveOptionName, "r", "Recursively pin the object linked to by the specified object(s).").WithDefault(true),
65
+ cmdkit.BoolOption(pinProgressOptionName, "Show progress"),
66
},
67
Type: AddPinOutput{},
68
Run: func(req cmds.Request, res cmds.Response) {
@@ -76,12 +81,12 @@ var addPinCmd = &cmds.Command{
81
defer n.Blockstore.PinLock().Unlock()
82
83
// set recursive flag
79
- recursive, _, err := req.Option("recursive").Bool()
84
+ recursive, _, err := req.Option(pinRecursiveOptionName).Bool()
85
if err != nil {
86
res.SetError(err, cmdkit.ErrNormal)
87
return
88
}
84
- showProgress, _, _ := req.Option("progress").Bool()
89
+ showProgress, _, _ := req.Option(pinProgressOptionName).Bool()
90
91
if !showProgress {
92
added, err := corerepo.Pin(n, api, req.Context(), req.Arguments(), recursive)
@@ -188,7 +193,7 @@ collected if needed. (By default, recursively. Use -r=false for direct pins.)
193
cmdkit.StringArg("ipfs-path", true, true, "Path to object(s) to be unpinned.").EnableStdin(),
194
},
195
Options: []cmdkit.Option{
191
- cmdkit.BoolOption("recursive", "r", "Recursively unpin the object linked to by the specified object(s).").WithDefault(true),
196
+ cmdkit.BoolOption(pinRecursiveOptionName, "r", "Recursively unpin the object linked to by the specified object(s).").WithDefault(true),
197
},
198
Type: PinOutput{},
199
Run: func(req cmds.Request, res cmds.Response) {
@@ -205,7 +210,7 @@ collected if needed. (By default, recursively. Use -r=false for direct pins.)
210
}
211
212
// set recursive flag
208
- recursive, _, err := req.Option("recursive").Bool()
213
+ recursive, _, err := req.Option(pinRecursiveOptionName).Bool()
214
if err != nil {
215
res.SetError(err, cmdkit.ErrNormal)
216
return
@@ -240,6 +245,11 @@ collected if needed. (By default, recursively. Use -r=false for direct pins.)
245
},
246
}
247
248
+const (
249
+ pinTypeOptionName = "type"
250
+ pinQuietOptionName = "quiet"
251
+)
252
+
253
var listPinCmd = &cmds.Command{
254
Helptext: cmdkit.HelpText{
255
Tagline: "List objects pinned to local storage.",
@@ -288,8 +298,8 @@ Example:
298
cmdkit.StringArg("ipfs-path", false, true, "Path to object(s) to be listed."),
299
},
300
Options: []cmdkit.Option{
291
- cmdkit.StringOption("type", "t", "The type of pinned keys to list. Can be \"direct\", \"indirect\", \"recursive\", or \"all\".").WithDefault("all"),
292
- cmdkit.BoolOption("quiet", "q", "Write just hashes of objects."),
301
+ cmdkit.StringOption(pinTypeOptionName, "t", "The type of pinned keys to list. Can be \"direct\", \"indirect\", \"recursive\", or \"all\".").WithDefault("all"),
302
+ cmdkit.BoolOption(pinQuietOptionName, "q", "Write just hashes of objects."),
303
},
304
Run: func(req cmds.Request, res cmds.Response) {
305
n, err := req.InvocContext().GetNode()
@@ -304,7 +314,7 @@ Example:
314
return
315
}
316
307
- typeStr, _, err := req.Option("type").String()
317
+ typeStr, _, err := req.Option(pinTypeOptionName).String()
318
if err != nil {
319
res.SetError(err, cmdkit.ErrNormal)
320
return
@@ -340,7 +350,7 @@ Example:
350
return nil, err
351
}
352
343
- quiet, _, err := res.Request().Option("quiet").Bool()
353
+ quiet, _, err := res.Request().Option(pinQuietOptionName).Bool()
354
if err != nil {
355
return nil, err
356
}
@@ -362,6 +372,10 @@ Example:
372
},
373
}
374
375
+const (
376
+ pinUnpinOptionName = "unpin"
377
+)
378
+
379
var updatePinCmd = &cmds.Command{
380
Helptext: cmdkit.HelpText{
381
Tagline: "Update a recursive pin",
@@ -377,7 +391,7 @@ new pin and removing the old one.
391
cmdkit.StringArg("to-path", true, false, "Path to new object to be pinned."),
392
},
393
Options: []cmdkit.Option{
380
- cmdkit.BoolOption("unpin", "Remove the old pin.").WithDefault(true),
394
+ cmdkit.BoolOption(pinUnpinOptionName, "Remove the old pin.").WithDefault(true),
395
},
396
Type: PinOutput{},
397
Run: func(req cmds.Request, res cmds.Response) {
@@ -387,7 +401,7 @@ new pin and removing the old one.
401
return
402
}
403
390
- unpin, _, err := req.Option("unpin").Bool()
404
+ unpin, _, err := req.Option(pinUnpinOptionName).Bool()
405
if err != nil {
406
res.SetError(err, cmdkit.ErrNormal)
407
return
@@ -431,13 +445,17 @@ new pin and removing the old one.
445
},
446
}
447
448
+const (
449
+ pinVerboseOptionName = "verbose"
450
+)
451
+
452
var verifyPinCmd = &cmds.Command{
453
Helptext: cmdkit.HelpText{
454
Tagline: "Verify that recursive pins are complete.",
455
},
456
Options: []cmdkit.Option{
439
- cmdkit.BoolOption("verbose", "Also write the hashes of non-broken pins."),
440
- cmdkit.BoolOption("quiet", "q", "Write just hashes of broken pins."),
457
+ cmdkit.BoolOption(pinVerboseOptionName, "Also write the hashes of non-broken pins."),
458
+ cmdkit.BoolOption(pinQuietOptionName, "q", "Write just hashes of broken pins."),
459
},
460
Run: func(req cmds.Request, res cmds.Response) {
461
n, err := req.InvocContext().GetNode()
@@ -446,8 +464,8 @@ var verifyPinCmd = &cmds.Command{
464
return
465
}
466
449
- verbose, _, _ := res.Request().Option("verbose").Bool()
450
- quiet, _, _ := res.Request().Option("quiet").Bool()
467
+ verbose, _, _ := res.Request().Option(pinVerboseOptionName).Bool()
468
+ quiet, _, _ := res.Request().Option(pinQuietOptionName).Bool()
469
470
if verbose && quiet {
471
res.SetError(fmt.Errorf("the --verbose and --quiet options can not be used at the same time"), cmdkit.ErrNormal)
@@ -464,7 +482,7 @@ var verifyPinCmd = &cmds.Command{
482
Type: PinVerifyRes{},
483
Marshalers: cmds.MarshalerMap{
484
cmds.Text: func(res cmds.Response) (io.Reader, error) {
467
- quiet, _, _ := res.Request().Option("quiet").Bool()
485
+ quiet, _, _ := res.Request().Option(pinQuietOptionName).Bool()
486
487
out, err := unwrapOutput(res.Output())
488
if err != nil {
core/commands/ping.go
+6
-2
@@ -27,6 +27,10 @@ type PingResult struct {
27
Text string
28
}
29
30
+const (
31
+ pingCountOptionName = "count"
32
+)
33
+
34
// ErrPingSelf is returned when the user attempts to ping themself.
35
var ErrPingSelf = errors.New("error: can't ping self")
36
@@ -43,7 +47,7 @@ trip latency information.
47
cmdkit.StringArg("peer ID", true, true, "ID of peer to be pinged.").EnableStdin(),
48
},
49
Options: []cmdkit.Option{
46
- cmdkit.IntOption("count", "n", "Number of ping messages to send.").WithDefault(10),
50
+ cmdkit.IntOption(pingCountOptionName, "n", "Number of ping messages to send.").WithDefault(10),
51
},
52
Marshalers: cmds.MarshalerMap{
53
cmds.Text: func(res cmds.Response) (io.Reader, error) {
@@ -97,7 +101,7 @@ trip latency information.
101
n.Peerstore.AddAddr(peerID, addr, pstore.TempAddrTTL) // temporary
102
}
103
100
- numPings, _, err := req.Option("count").Int()
104
+ numPings, _, err := req.Option(pingCountOptionName).Int()
105
if err != nil {
106
res.SetError(err, cmdkit.ErrNormal)
107
return
core/commands/pubsub.go
+6
-2
@@ -44,6 +44,10 @@ To use, the daemon must be run with '--enable-pubsub-experiment'.
44
},
45
}
46
47
+const (
48
+ pubsubDiscoverOptionName = "discover"
49
+)
50
+
51
var PubsubSubCmd = &cmds.Command{
52
Helptext: cmdkit.HelpText{
53
Tagline: "Subscribe to messages on a given topic.",
@@ -72,7 +76,7 @@ This command outputs data in the following encodings:
76
cmdkit.StringArg("topic", true, false, "String name of topic to subscribe to."),
77
},
78
Options: []cmdkit.Option{
75
- cmdkit.BoolOption("discover", "try to discover other peers subscribed to the same topic"),
79
+ cmdkit.BoolOption(pubsubDiscoverOptionName, "try to discover other peers subscribed to the same topic"),
80
},
81
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
82
n, err := cmdenv.GetNode(env)
@@ -96,7 +100,7 @@ This command outputs data in the following encodings:
100
}
101
defer sub.Cancel()
102
99
- discover, _ := req.Options["discover"].(bool)
103
+ discover, _ := req.Options[pubsubDiscoverOptionName].(bool)
104
if discover {
105
go func() {
106
blk := blocks.NewBlock([]byte("floodsub:" + topic))
core/commands/refs.go
+18
-10
@@ -22,6 +22,14 @@ type KeyList struct {
22
Keys []cid.Cid
23
}
24
25
+const (
26
+ refsFormatOptionName = "format"
27
+ refsEdgesOptionName = "edges"
28
+ refsUniqueOptionName = "unique"
29
+ refsRecursiveOptionName = "recursive"
30
+ refsMaxDepthOptionName = "max-depth"
31
+)
32
+
33
// KeyListTextMarshaler outputs a KeyList as plaintext, one key per line
34
func KeyListTextMarshaler(res cmds.Response) (io.Reader, error) {
35
out, err := unwrapOutput(res.Output())
@@ -60,11 +68,11 @@ NOTE: List all references recursively by using the flag '-r'.
68
cmdkit.StringArg("ipfs-path", true, true, "Path to the object(s) to list refs from.").EnableStdin(),
69
},
70
Options: []cmdkit.Option{
63
- cmdkit.StringOption("format", "Emit edges with given format. Available tokens: <src> <dst> <linkname>.").WithDefault("<dst>"),
64
- cmdkit.BoolOption("edges", "e", "Emit edge format: `<from> -> <to>`."),
65
- cmdkit.BoolOption("unique", "u", "Omit duplicate refs from output."),
66
- cmdkit.BoolOption("recursive", "r", "Recursively list links of child nodes."),
67
- cmdkit.IntOption("max-depth", "Only for recursive refs, limits fetch and listing to the given depth").WithDefault(-1),
71
+ cmdkit.StringOption(refsFormatOptionName, "Emit edges with given format. Available tokens: <src> <dst> <linkname>.").WithDefault("<dst>"),
72
+ cmdkit.BoolOption(refsEdgesOptionName, "e", "Emit edge format: `<from> -> <to>`."),
73
+ cmdkit.BoolOption(refsUniqueOptionName, "u", "Omit duplicate refs from output."),
74
+ cmdkit.BoolOption(refsRecursiveOptionName, "r", "Recursively list links of child nodes."),
75
+ cmdkit.IntOption(refsMaxDepthOptionName, "Only for recursive refs, limits fetch and listing to the given depth").WithDefault(-1),
76
},
77
Run: func(req cmds.Request, res cmds.Response) {
78
ctx := req.Context()
@@ -74,19 +82,19 @@ NOTE: List all references recursively by using the flag '-r'.
82
return
83
}
84
77
- unique, _, err := req.Option("unique").Bool()
85
+ unique, _, err := req.Option(refsUniqueOptionName).Bool()
86
if err != nil {
87
res.SetError(err, cmdkit.ErrNormal)
88
return
89
}
90
83
- recursive, _, err := req.Option("recursive").Bool()
91
+ recursive, _, err := req.Option(refsRecursiveOptionName).Bool()
92
if err != nil {
93
res.SetError(err, cmdkit.ErrNormal)
94
return
95
}
96
89
- maxDepth, _, err := req.Option("max-depth").Int()
97
+ maxDepth, _, err := req.Option(refsMaxDepthOptionName).Int()
98
if err != nil {
99
res.SetError(err, cmdkit.ErrNormal)
100
return
@@ -96,13 +104,13 @@ NOTE: List all references recursively by using the flag '-r'.
104
maxDepth = 1 // write only direct refs
105
}
106
99
- format, _, err := req.Option("format").String()
107
+ format, _, err := req.Option(refsFormatOptionName).String()
108
if err != nil {
109
res.SetError(err, cmdkit.ErrNormal)
110
return
111
}
112
105
- edges, _, err := req.Option("edges").Bool()
113
+ edges, _, err := req.Option(refsEdgesOptionName).Bool()
114
if err != nil {
115
res.SetError(err, cmdkit.ErrNormal)
116
return
core/commands/repo.go
+20
-10
@@ -51,6 +51,11 @@ type GcResult struct {
51
Error string `json:",omitempty"`
52
}
53
54
+const (
55
+ repoStreamErrorsOptionName = "stream-errors"
56
+ repoQuietOptionName = "quiet"
57
+)
58
+
59
var repoGcCmd = &cmds.Command{
60
Helptext: cmdkit.HelpText{
61
Tagline: "Perform a garbage collection sweep on the repo.",
@@ -61,8 +66,8 @@ order to reclaim hard disk space.
66
`,
67
},
68
Options: []cmdkit.Option{
64
- cmdkit.BoolOption("stream-errors", "Stream errors."),
65
- cmdkit.BoolOption("quiet", "q", "Write minimal output."),
69
+ cmdkit.BoolOption(repoStreamErrorsOptionName, "Stream errors."),
70
+ cmdkit.BoolOption(repoQuietOptionName, "q", "Write minimal output."),
71
},
72
Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error {
73
n, err := cmdenv.GetNode(env)
@@ -70,7 +75,7 @@ order to reclaim hard disk space.
75
return err
76
}
77
73
- streamErrors, _ := req.Options["stream-errors"].(bool)
78
+ streamErrors, _ := req.Options[repoStreamErrorsOptionName].(bool)
79
80
gcOutChan := corerepo.GarbageCollectAsync(n, req.Context)
81
@@ -101,7 +106,7 @@ order to reclaim hard disk space.
106
Type: GcResult{},
107
Encoders: cmds.EncoderMap{
108
cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error {
104
- quiet, _ := req.Options["quiet"].(bool)
109
+ quiet, _ := req.Options[repoQuietOptionName].(bool)
110
111
obj, ok := v.(*GcResult)
112
if !ok {
@@ -124,6 +129,11 @@ order to reclaim hard disk space.
129
},
130
}
131
132
+const (
133
+ repoSizeOnlyOptionName = "size-only"
134
+ repoHumanOptionName = "human"
135
+)
136
+
137
var repoStatCmd = &cmds.Command{
138
Helptext: cmdkit.HelpText{
139
Tagline: "Get stats for the currently used repo.",
@@ -139,8 +149,8 @@ Version string The repo version.
149
`,
150
},
151
Options: []cmdkit.Option{
142
- cmdkit.BoolOption("size-only", "Only report RepoSize and StorageMax."),
143
- cmdkit.BoolOption("human", "Output sizes in MiB."),
152
+ cmdkit.BoolOption(repoSizeOnlyOptionName, "Only report RepoSize and StorageMax."),
153
+ cmdkit.BoolOption(repoHumanOptionName, "Output sizes in MiB."),
154
},
155
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
156
n, err := cmdenv.GetNode(env)
@@ -148,7 +158,7 @@ Version string The repo version.
158
return err
159
}
160
151
- sizeOnly, _ := req.Options["size-only"].(bool)
161
+ sizeOnly, _ := req.Options[repoSizeOnlyOptionName].(bool)
162
if sizeOnly {
163
sizeStat, err := corerepo.RepoSize(req.Context, n)
164
if err != nil {
@@ -178,8 +188,8 @@ Version string The repo version.
188
wtr := tabwriter.NewWriter(w, 0, 0, 1, ' ', 0)
189
defer wtr.Flush()
190
181
- human, _ := req.Options["human"].(bool)
182
- sizeOnly, _ := req.Options["size-only"].(bool)
191
+ human, _ := req.Options[repoHumanOptionName].(bool)
192
+ sizeOnly, _ := req.Options[repoSizeOnlyOptionName].(bool)
193
194
printSize := func(name string, size uint64) {
195
sizeInMiB := size / (1024 * 1024)
@@ -360,7 +370,7 @@ var repoVersionCmd = &oldcmds.Command{
370
},
371
372
Options: []cmdkit.Option{
363
- cmdkit.BoolOption("quiet", "q", "Write minimal output."),
373
+ cmdkit.BoolOption(repoQuietOptionName, "q", "Write minimal output."),
374
},
375
Run: func(req oldcmds.Request, res oldcmds.Response) {
376
res.SetOutput(&RepoVersion{
core/commands/resolve.go
+12
-6
@@ -20,6 +20,12 @@ import (
20
"gx/ipfs/QmXTmUCBtDUrzDYVzASogLiNph7EBuYqEgPL7QoHNMzUnz/go-ipfs-cmds"
21
)
22
23
+const (
24
+ resolveRecursiveOptionName = "recursive"
25
+ resolveDhtRecordCountOptionName = "dht-record-count"
26
+ resolveDhtTimeoutOptionName = "dht-timeout"
27
+)
28
+
29
var ResolveCmd = &cmds.Command{
30
Helptext: cmdkit.HelpText{
31
Tagline: "Resolve the value of names to IPFS.",
@@ -64,9 +70,9 @@ Resolve the value of an IPFS DAG path:
70
cmdkit.StringArg("name", true, false, "The name to resolve.").EnableStdin(),
71
},
72
Options: []cmdkit.Option{
67
- cmdkit.BoolOption("recursive", "r", "Resolve until the result is an IPFS name."),
68
- cmdkit.IntOption("dht-record-count", "dhtrc", "Number of records to request for DHT resolution."),
69
- cmdkit.StringOption("dht-timeout", "dhtt", "Max time to collect values during DHT resolution eg \"30s\". Pass 0 for no timeout."),
73
+ cmdkit.BoolOption(resolveRecursiveOptionName, "r", "Resolve until the result is an IPFS name."),
74
+ cmdkit.IntOption(resolveDhtRecordCountOptionName, "dhtrc", "Number of records to request for DHT resolution."),
75
+ cmdkit.StringOption(resolveDhtTimeoutOptionName, "dhtt", "Max time to collect values during DHT resolution eg \"30s\". Pass 0 for no timeout."),
76
},
77
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
78
api, err := cmdenv.GetApi(env)
@@ -87,12 +93,12 @@ Resolve the value of an IPFS DAG path:
93
}
94
95
name := req.Arguments[0]
90
- recursive, _ := req.Options["recursive"].(bool)
96
+ recursive, _ := req.Options[resolveRecursiveOptionName].(bool)
97
98
// the case when ipns is resolved step by step
99
if strings.HasPrefix(name, "/ipns/") && !recursive {
94
- rc, rcok := req.Options["dht-record-count"].(uint)
95
- dhtt, dhttok := req.Options["dht-timeout"].(string)
100
+ rc, rcok := req.Options[resolveDhtRecordCountOptionName].(uint)
101
+ dhtt, dhttok := req.Options[resolveDhtTimeoutOptionName].(string)
102
ropts := []options.NameResolveOption{
103
options.Name.ResolveOption(nsopts.Depth(1)),
104
}
core/commands/stat.go
+15
-8
@@ -33,6 +33,13 @@ for your IPFS node.`,
33
},
34
}
35
36
+const (
37
+ statPeerOptionName = "peer"
38
+ statProtoOptionName = "proto"
39
+ statPollOptionName = "poll"
40
+ statIntervalOptionName = "interval"
41
+)
42
+
43
var statBwCmd = &cmds.Command{
44
Helptext: cmdkit.HelpText{
45
Tagline: "Print ipfs bandwidth information.",
@@ -71,10 +78,10 @@ Example:
78
`,
79
},
80
Options: []cmdkit.Option{
74
- cmdkit.StringOption("peer", "p", "Specify a peer to print bandwidth for."),
75
- cmdkit.StringOption("proto", "t", "Specify a protocol to print bandwidth for."),
76
- cmdkit.BoolOption("poll", "Print bandwidth at an interval."),
77
- cmdkit.StringOption("interval", "i", `Time interval to wait between updating output, if 'poll' is true.
81
+ cmdkit.StringOption(statPeerOptionName, "p", "Specify a peer to print bandwidth for."),
82
+ cmdkit.StringOption(statProtoOptionName, "t", "Specify a protocol to print bandwidth for."),
83
+ cmdkit.BoolOption(statPollOptionName, "Print bandwidth at an interval."),
84
+ cmdkit.StringOption(statIntervalOptionName, "i", `Time interval to wait between updating output, if 'poll' is true.
85
86
This accepts durations such as "300s", "1.5h" or "2h45m". Valid time units are:
87
"ns", "us" (or "µs"), "ms", "s", "m", "h".`).WithDefault("1s"),
@@ -95,7 +102,7 @@ Example:
102
return fmt.Errorf("bandwidth reporter disabled in config")
103
}
104
98
- pstr, pfound := req.Options["peer"].(string)
105
+ pstr, pfound := req.Options[statPeerOptionName].(string)
106
tstr, tfound := req.Options["proto"].(string)
107
if pfound && tfound {
108
return cmdkit.Errorf(cmdkit.ErrClient, "please only specify peer OR protocol")
@@ -110,13 +117,13 @@ Example:
117
pid = checkpid
118
}
119
113
- timeS, _ := req.Options["interval"].(string)
120
+ timeS, _ := req.Options[statIntervalOptionName].(string)
121
interval, err := time.ParseDuration(timeS)
122
if err != nil {
123
return err
124
}
125
119
- doPoll, _ := req.Options["poll"].(bool)
126
+ doPoll, _ := req.Options[statPollOptionName].(bool)
127
for {
128
if pfound {
129
stats := nd.Reporter.GetBandwidthForPeer(pid)
@@ -142,7 +149,7 @@ Example:
149
Type: metrics.Stats{},
150
PostRun: cmds.PostRunMap{
151
cmds.CLI: func(res cmds.Response, re cmds.ResponseEmitter) error {
145
- polling, _ := res.Request().Options["poll"].(bool)
152
+ polling, _ := res.Request().Options[statPollOptionName].(bool)
153
154
if polling {
155
fmt.Fprintln(os.Stdout, "Total Up Total Down Rate Up Rate Down")
core/commands/swarm.go
+15
-8
@@ -52,6 +52,13 @@ ipfs peers in the internet.
52
},
53
}
54
55
+const (
56
+ swarmVerboseOptionName = "verbose"
57
+ swarmStreamsOptionName = "streams"
58
+ swarmLatencyOptionName = "latency"
59
+ swarmDirectionOptionName = "direction"
60
+)
61
+
62
var swarmPeersCmd = &cmds.Command{
63
Helptext: cmdkit.HelpText{
64
Tagline: "List peers with open connections.",
@@ -60,10 +67,10 @@ var swarmPeersCmd = &cmds.Command{
67
`,
68
},
69
Options: []cmdkit.Option{
63
- cmdkit.BoolOption("verbose", "v", "display all extra information"),
64
- cmdkit.BoolOption("streams", "Also list information about open streams for each peer"),
65
- cmdkit.BoolOption("latency", "Also list information about latency to each peer"),
66
- cmdkit.BoolOption("direction", "Also list information about the direction of connection"),
70
+ cmdkit.BoolOption(swarmVerboseOptionName, "v", "display all extra information"),
71
+ cmdkit.BoolOption(swarmStreamsOptionName, "Also list information about open streams for each peer"),
72
+ cmdkit.BoolOption(swarmLatencyOptionName, "Also list information about latency to each peer"),
73
+ cmdkit.BoolOption(swarmDirectionOptionName, "Also list information about the direction of connection"),
74
},
75
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
76
api, err := cmdenv.GetApi(env)
@@ -71,10 +78,10 @@ var swarmPeersCmd = &cmds.Command{
78
return err
79
}
80
74
- verbose, _ := req.Options["verbose"].(bool)
75
- latency, _ := req.Options["latency"].(bool)
76
- streams, _ := req.Options["streams"].(bool)
77
- direction, _ := req.Options["direction"].(bool)
81
+ verbose, _ := req.Options[swarmVerboseOptionName].(bool)
82
+ latency, _ := req.Options[swarmLatencyOptionName].(bool)
83
+ streams, _ := req.Options[swarmStreamsOptionName].(bool)
84
+ direction, _ := req.Options[swarmDirectionOptionName].(bool)
85
86
conns, err := api.Swarm().Peers(req.Context)
87
if err != nil {
core/commands/version.go
+15
-8
@@ -22,6 +22,13 @@ type VersionOutput struct {
22
Golang string
23
}
24
25
+const (
26
+ versionNumberOptionName = "number"
27
+ versionCommitOptionName = "commit"
28
+ versionRepoOptionName = "repo"
29
+ versionAllOptionName = "all"
30
+)
31
+
32
var VersionCmd = &cmds.Command{
33
Helptext: cmdkit.HelpText{
34
Tagline: "Show ipfs version information.",
@@ -29,10 +36,10 @@ var VersionCmd = &cmds.Command{
36
},
37
38
Options: []cmdkit.Option{
32
- cmdkit.BoolOption("number", "n", "Only show the version number."),
33
- cmdkit.BoolOption("commit", "Show the commit hash."),
34
- cmdkit.BoolOption("repo", "Show repo version."),
35
- cmdkit.BoolOption("all", "Show all version information"),
39
+ cmdkit.BoolOption(versionNumberOptionName, "n", "Only show the version number."),
40
+ cmdkit.BoolOption(versionCommitOptionName, "Show the commit hash."),
41
+ cmdkit.BoolOption(versionRepoOptionName, "Show repo version."),
42
+ cmdkit.BoolOption(versionAllOptionName, "Show all version information"),
43
},
44
Run: func(req cmds.Request, res cmds.Response) {
45
res.SetOutput(&VersionOutput{
@@ -55,7 +62,7 @@ var VersionCmd = &cmds.Command{
62
return nil, e.TypeErr(version, v)
63
}
64
58
- repo, _, err := res.Request().Option("repo").Bool()
65
+ repo, _, err := res.Request().Option(versionRepoOptionName).Bool()
66
if err != nil {
67
return nil, err
68
}
@@ -64,7 +71,7 @@ var VersionCmd = &cmds.Command{
71
return strings.NewReader(version.Repo + "\n"), nil
72
}
73
67
- commit, _, err := res.Request().Option("commit").Bool()
74
+ commit, _, err := res.Request().Option(versionCommitOptionName).Bool()
75
commitTxt := ""
76
if err != nil {
77
return nil, err
@@ -73,7 +80,7 @@ var VersionCmd = &cmds.Command{
80
commitTxt = "-" + version.Commit
81
}
82
76
- number, _, err := res.Request().Option("number").Bool()
83
+ number, _, err := res.Request().Option(versionNumberOptionName).Bool()
84
if err != nil {
85
return nil, err
86
}
@@ -81,7 +88,7 @@ var VersionCmd = &cmds.Command{
88
return strings.NewReader(fmt.Sprintln(version.Version + commitTxt)), nil
89
}
90
84
- all, _, err := res.Request().Option("all").Bool()
91
+ all, _, err := res.Request().Option(versionAllOptionName).Bool()
92
if err != nil {
93
return nil, err
94
}