@cryptotaxi247 / kubo / commits / 3dc0ce7fa

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 }