Parent directory

_ipfs

31117 bytes
  1#compdef ipfs
  2#autoload
  3
  4local -a _1st_arguments
  5_1st_arguments=(
  6  'add:Add a file or directory to ipfs.'
  7  'bitswap:Interact with the bitswap agent.'
  8  'block:Interact with raw IPFS blocks.'
  9  'bootstrap:Show or edit the list of bootstrap peers.'
 10  'cat:Show IPFS object data.'
 11  'cid:Convert and discover properties of CIDs'
 12  'commands:List all available commands.'
 13  'config:Get and set ipfs config values.'
 14  'daemon:Run a network-connected IPFS node.'
 15  'dag:Interact with ipld dag objects. (experimental)'
 16  'dht:Issue commands directly through the DHT.'
 17  'diag:Generate diagnostic reports.'
 18  'dns:Resolve DNS links.'
 19  'files:Interact with unixfs files.'
 20  'filestore:Interact with filestore objects. (experimental)'
 21  'get:Download IPFS objects.'
 22  'id:Show ipfs node id info.'
 23  'init:Initializes ipfs config file.'
 24  'key:Create and list IPNS name keypairs.'
 25  'log:Interact with the daemon log output.'
 26  'ls:List directory contents for Unix filesystem objects.'
 27  'mount:Mounts IPFS to the filesystem (read-only).'
 28  'name:Publish and resolve IPNS names.'
 29  'object:Interact with IPFS objects.'
 30  'p2p:Libp2p stream mounting.'
 31  'pin:Pin (and unpin) objects to local storage.'
 32  'ping:Send echo request packets to IPFS hosts.'
 33  'refs:List links (references) from an object.'
 34  'repo:Manipulate the IPFS repo.'
 35  'resolve:Resolve the value of names to IPFS.'
 36  'stats:Query IPFS statistics.'
 37  'swarm:Interact with the swarm.'
 38  'tar:Utility functions for tar files in ipfs.'
 39  'update:Download and apply go-ipfs updates'
 40  'version:Show ipfs version information.'
 41)
 42
 43_ipfs_subcommand(){
 44  local curcontext="$curcontext" state line
 45  typeset -A opt_args
 46  _arguments -C ':command:->command' '*::options:->options'
 47  case $state in
 48    (command)
 49      _describe -t commands "ipfs subcommand" $1
 50      return
 51    ;;
 52    (options)
 53      case $line[1] in
 54        (wantlist)
 55          case $MAIN_SUBCOMMAND in
 56            (bitswap)
 57              _arguments '(-p --peer)'{-p,--peer}'[Specify which peer to show wantlist for. Default: self.]'
 58            ;;
 59          esac
 60        ;;
 61        (add)
 62          case $MAIN_SUBCOMMAND in
 63            (pin)
 64              _arguments \
 65                '(-r --recursive)'{-r,--recursive}'[Recursively pin the object linked to by the specified object(s). Default: true.]' \
 66                '--progress[Show progress.]'
 67            ;;
 68            (bootstrap)
 69              local -a _bootstrap_rm_arguments
 70              _bootstrap_rm_arguments=(
 71                'default:Add default peers to the bootstrap list.'
 72              )
 73              _ipfs_subcommand _bootstrap_rm_arguments
 74            ;;
 75          esac
 76        ;;
 77        (rm)
 78          case $MAIN_SUBCOMMAND in
 79            (pin)
 80              _arguments '(-r --recursive)'{-r,--recursive}'[Recursively unpin the object linked to by the specified object(s). Default: true.]'
 81            ;;
 82            (bootstrap)
 83              local -a _bootstrap_rm_arguments
 84              _bootstrap_rm_arguments=(
 85                'all:Remove all peers from the bootstrap list.'
 86              )
 87              _ipfs_subcommand _bootstrap_rm_arguments
 88            ;;
 89          esac
 90        ;;
 91        (ls)
 92          case $MAIN_SUBCOMMAND in
 93            (pin)
 94              _arguments \
 95                '(-t --type)'{-t,--type}'[The type of pinned keys to list. Can be "direct", "indirect", "recursive", or "all". Default: all.]' \
 96                '(-q --quiet)'{-q,--quiet}'[Write just hashes of objects.]' \
 97                '(-s --stream)'{-s,--stream}'[Enable streaming of pins as they are discovered.]'
 98            ;;
 99            (p2p)
100              _arguments '(-v --headers)'{-v,--headers}'[Print table headers (Protocol, Listen, Target).]'
101            ;;
102          esac
103        ;;
104        (update)
105          case $MAIN_SUBCOMMAND in
106            (pin)
107              _arguments '--unpin[Remove the old pin. Default: true.]'
108            ;;
109          esac
110        ;;
111        (verify)
112          case $MAIN_SUBCOMMAND in
113            (pin)
114              _arguments \
115                '--verbose[Also write the hashes of non-broken pins.]' \
116                '(-q --quiet)'{-q,--quiet}'[Write just hashes of broken pins.]'
117            ;;
118          esac
119        ;;
120        (query|findpeer)
121          case $MAIN_SUBCOMMAND in
122            (dht)
123              _arguments '(-v --verbose)'{-v,--verbose}'[Print extra information.]'
124            ;;
125          esac
126        ;;
127        (get)
128          case $MAIN_SUBCOMMAND in
129            (dht)
130              _arguments '(-v --verbose)'{-v,--verbose}'[Print extra information.]'
131            ;;
132            (object)
133              _arguments '--data-encoding[Encoding type of the data field, either "text" or "base64". Default: text.]'
134            ;;
135          esac
136        ;;
137        (put)
138          case $MAIN_SUBCOMMAND in
139            (dht)
140              _arguments '(-v --verbose)'{-v,--verbose}'[Print extra information.]'
141            ;;
142            (object)
143              _arguments \
144                '--inputenc[Encoding type of input data. One of: {"protobuf", "json"}. Default: json.]' \
145                '--datafieldenc[Encoding type of the data field, either "text" or "base64". Default: text.]' \
146                '--pin[Pin this object when adding.]' \
147                '(-q --quiet)'{-q,--quiet}'[Write minimal output]'
148            ;;
149          esac
150        ;;
151        (findprovs)
152          case $MAIN_SUBCOMMAND in
153            (dht)
154              _arguments \
155                '(-v --verbose)'{-v,--verbose}'[Print extra information.]' \
156                '(-n --num-providers)'{-n,--num-providers}'[The number of providers to find. Default: 20.]'
157            ;;
158          esac
159        ;;
160        (provide)
161          case $MAIN_SUBCOMMAND in
162            (dht)
163              _arguments \
164                '(-v --verbose)'{-v,--verbose}'[Print extra information.]' \
165                '(-r --recursive)'{-r,--recursive}'[Recursively provide entire graph.]'
166            ;;
167          esac
168        ;;
169        (cmds)
170          case $MAIN_SUBCOMMAND in
171            (diag)
172              _arguments '(-v --verbose)'{-v,--verbose}'[Print extra information.]'
173            ;;
174          esac
175        ;;
176        (diff)
177          case $MAIN_SUBCOMMAND in
178            (object)
179              _arguments '(-v --verbose)'{-v,--verbose}'[Print extra information.]'
180            ;;
181          esac
182        ;;
183        (stat)
184          case $MAIN_SUBCOMMAND in
185            (dag)
186              _arguments \
187                '(-p --progress)'{-p,--progress}'[Return progressive data while reading through the DAG. Default: true.]'
188            ;;
189            (object)
190              _arguments '--human[Print sizes in human readable format (e.g., 1K 234M 2G).]'
191            ;;
192            (repo)
193              _arguments \
194                '(-s --size-only)'{-s,--size-only}'[Only report RepoSize and StorageMax.]' \
195                '(-H --human)'{-H,--human}'[Print sizes in human readable format (e.g., 1K 234M 2G).]'
196            ;;
197          esac
198        ;;
199        (publish)
200          case $MAIN_SUBCOMMAND in
201            (name)
202              _arguments \
203                '--resolve[Check if the given path can be resolved before publishing. Default: true.]' \
204                '(-t --lifetime)'{-t,--lifetime}'[Time duration that the record will be valid for. Default: 24h.]' \
205                '--allow-offline[When offline, save the IPNS record to the local datastore without broadcasting to the network instead of simply failing.]' \
206                '--ttl[Time duration this record should be cached for. Uses the same syntax as the lifetime option. (caution: experimental).]' \
207                '(-k --key)'{-k,--key}"[Name of the key to be used or a valid PeerID, as listed by 'ipfs key list -l'. Default: self.]" \
208                '(-Q --quieter)'{-Q,--quieter}'[Write only final hash.]' \
209                '--ipns-base[Encoding used for keys: Can either be a multibase encoded CID or a base58btc encoded multihash. Takes {b58mh|base36|k|base32|b...}. Default: base36.]'
210            ;;
211          esac
212        ;;
213        (pubsub)
214          case $MAIN_SUBCOMMAND in
215            (name)
216              local -a _name_pubsub_arguments
217              _name_pubsub_arguments=(
218                'cancel:Cancel a name subscription'
219                'state:Query the state of IPNS pubsub'
220                'subs:Show current name subscriptions'
221              )
222              _ipfs_subcommand _name_pubsub_arguments
223            ;;
224          esac
225        ;;
226        (resolve)
227          case $MAIN_SUBCOMMAND in
228            (name)
229              _arguments \
230                '(-r --recursive)'{-r,--recursive}'[Resolve until the result is not an IPNS name. Default: true.]' \
231                '(-n --nocache)'{-n,--nocache}'[Do not use cached entries.]' \
232                '(--dhtrc --dht-record-count)'{--dhtrc,--dht-record-count}'[Number of records to request for DHT resolution.]' \
233                '(--dhtt --dht-timeout)'{--dhtt,--dht-timeout}'[Max time to collect values during DHT resolution eg "30s". Pass 0 for no timeout.]' \
234                '(-s --stream)'{-s,--stream}'[Stream entries as they are found.]'
235            ;;
236          esac
237        ;;
238        (patch)
239          case $MAIN_SUBCOMMAND in
240            (object)
241              local -a _object_patch_arguments
242              _object_patch_arguments=(
243                'add-link:Add a link to a given object.'
244                'append-data:Append data to the data segment of a dag node.'
245                'rm-link:Remove a link from a given object.'
246                'set-data:Set the data field of an IPFS object.'
247              )
248              _ipfs_subcommand _object_patch_arguments
249            ;;
250          esac
251        ;;
252        (gc)
253          case $MAIN_SUBCOMMAND in
254            (repo)
255              _arguments \
256                '--stream-errors[Stream errors.]' \
257                '(-q --quiet)'{-q,--quiet}'[Write minimal output.]'
258            ;;
259          esac
260        ;;
261        (bitswap)
262          case $MAIN_SUBCOMMAND in
263            (stats)
264              _arguments \
265                '(-v --verbose)'{-v,--verbose}'[Print extra information.]' \
266                '--human[Print sizes in human readable format (e.g., 1K 234M 2G).]'
267            ;;
268          esac
269        ;;
270        (bw)
271          case $MAIN_SUBCOMMAND in
272            (stats)
273              _arguments \
274                '(-p --peer)'{-p,--peer}'[Specify a peer to print bandwidth for.]' \
275                '(-t --proto)'{-t,--proto}'[Specify a protocol to print bandwidth for.]' \
276                '--poll[Print bandwidth at an interval.]' \
277                '(-i --interval)'{-i,--interval}"[Time interval to wait between updating output, if 'poll' is true.]"
278            ;;
279          esac
280        ;;
281        (repo)
282          case $MAIN_SUBCOMMAND in
283            (stats)
284              _arguments \
285                '--size-only[Only report RepoSize and StorageMax.]' \
286                '--human[Print sizes in human readable format (e.g., 1K 234M 2G).]'
287            ;;
288          esac
289        ;;
290        (bases)
291          case $MAIN_SUBCOMMAND in
292            (cid)
293              _arguments \
294                '--prefix[also include the single leter prefixes in addition to the code.]' \
295                '--numeric[also include numeric codes.]'
296            ;;
297          esac
298        ;;
299        (codecs|hashes)
300          case $MAIN_SUBCOMMAND in
301            (cid)
302              _arguments '--numeric[also include numeric codes.]'
303            ;;
304          esac
305        ;;
306        (format)
307          case $MAIN_SUBCOMMAND in
308            (cid)
309              _arguments \
310                '-f[Printf style format string. Default: %s.]' \
311                '-v[CID version to convert to.]' \
312                '--codec[CID codec to convert to.]' \
313                '-b[Multibase to display CID in.]'
314            ;;
315          esac
316        ;;
317        (close)
318          case $MAIN_SUBCOMMAND in
319            (p2p)
320              _arguments \
321                '(-a --all)'{-a,--all}'[Close all listeners.]' \
322                '(-p --protocol)'{-p,--protocol}'[Match protocol name.]' \
323                '(-l --listen-address)'{-l,--listen-address}'[Match listen address.]' \
324                '(-t --target-address)'{-t,--target-address}'[Match target address.]'
325            ;;
326          esac
327        ;;
328        (forward)
329          case $MAIN_SUBCOMMAND in
330            (p2p)
331              _arguments "--allow-custom-protocol[Don't require /x/ prefix.]"
332            ;;
333          esac
334        ;;
335        (listen)
336          case $MAIN_SUBCOMMAND in
337            (p2p)
338              _arguments \
339                "--allow-custom-protocol[Don't require /x/ prefix.]" \
340                '(-r --report-peer-id)'{-r,--report-peer-id}'[Send remote base58 peerid to target when a new connection is established.]'
341            ;;
342          esac
343        ;;
344        (stream)
345          case $MAIN_SUBCOMMAND in
346            (p2p)
347              local -a _p2p_stream_arguments
348              _p2p_stream_arguments=(
349                'close:Close active p2p stream.'
350                'ls:List active p2p streams.'
351              )
352              _ipfs_subcommand _p2p_stream_arguments
353            ;;
354          esac
355        ;;
356        (addrs)
357          case $MAIN_SUBCOMMAND in
358            (swarm)
359              local -a _swarm_addrs_arguments
360              _swarm_addrs_arguments=(
361                'listen:List interface listening addresses.'
362                'local:List local addresses.'
363              )
364              _ipfs_subcommand _swarm_addrs_arguments
365            ;;
366          esac
367        ;;
368        (filters)
369          case $MAIN_SUBCOMMAND in
370            (swarm)
371              local -a _swarm_filters_arguments
372              _swarm_filters_arguments=(
373                'add:Add an address filter.'
374                'rm:Remove an address filter.'
375              )
376              _ipfs_subcommand _swarm_filters_arguments
377            ;;
378          esac
379        ;;
380        (peers)
381          case $MAIN_SUBCOMMAND in
382            (swarm)
383              _arguments \
384                '(-v --verbose)'{-v,--verbose}'[display all extra information.]' \
385                '--streams[Also list information about open streams for each peer.]' \
386                '--latency[Also list information about latency to each peer.]' \
387                '--direction[Also list information about the direction of connection.]'
388            ;;
389          esac
390        ;;
391        (export)
392          case $MAIN_SUBCOMMAND in
393            (dag)
394              _arguments \
395                '(-p --progress)'{-p,--progress}'[Display progress on CLI. Defaults to true when STDERR is a TTY.]'
396            ;;
397            (key)
398              _arguments \
399                '(-o --output)'{-o,--output}'[The path where the output should be stored.]'
400            ;;
401          esac
402        ;;
403        (import)
404          case $MAIN_SUBCOMMAND in
405            (dag)
406              _arguments \
407                '--silent[No output.]' \
408                '--pin-roots[Pin optional roots listed in the .car headers after importing. Default: true.]'
409            ;;
410            (key)
411              _arguments \
412                '--ipns-base[Encoding used for keys: Can either be a multibase encoded CID or a base58btc encoded multihash. Takes {b58mh|base36|k|base32|b...}. Default: base36.]'
413            ;;
414          esac
415        ;;
416        (remote)
417          case $MAIN_SUBCOMMAND in
418            (pin)
419              local -a _pin_remote_arguments
420              _pin_remote_arguments=(
421                'add:Pin object to remote pinning service.'
422                'ls:List objects pinned to remote pinning service.'
423                'rm:Remove pins from remote pinning service.'
424                'service:Configure remote pinning services.'
425              )
426              _ipfs_subcommand _pin_remote_arguments
427            ;;
428          esac
429        ;;
430      esac
431    ;;
432  esac
433}
434
435local expl
436
437_arguments \
438  '(-c --config)'{-c,--config}'[Path to the configuration file to use.]' \
439  '(-D --debug)'{-D,--debug}'[Operate in debug mode.]' \
440  '(--help)--help[Show the full command help text.]' \
441  '(--h)-h[Show a short version of the command help text.]' \
442  '(-L --local)'{-L,--local}'[Run the command locally, instead of using the daemon. DEPRECATED: use --offline.]' \
443  '(--offline)--offline[Run the command offline.]' \
444  '(--api)--api[Use a specific API instance (defaults to /ip4/127.0.0.1/tcp/5001).]' \
445  '(--cid-base)--cid-base[Multibase encoding used for version 1 CIDs in output.]' \
446  '(--upgrade-cidv0-in-output)--upgrade-cidv0-in-output[Upgrade version 0 to version 1 CIDs in output.]' \
447  '(--enc --encoding)'{--enc,--encoding}'[The encoding type the output should be encoded with (json, xml, or text). Default: text.]' \
448  '(--stream-channels)--stream-channels[Stream channel output.]' \
449  '(--timeout)--timeout[Set a global timeout on the command.]' \
450  '*:: :->subcmds' && return 0
451
452if (( CURRENT == 1 )); then
453  _describe -t commands "ipfs subcommand" _1st_arguments
454  return
455fi
456
457MAIN_SUBCOMMAND="$words[1]"
458case $MAIN_SUBCOMMAND in
459  (add)
460    _arguments \
461      '(-r --recursive)'{-r,--recursive}'[Add directory paths recursively.]' \
462      '(--dereference-args)--dereference-args[Symlinks supplied in arguments are dereferenced.]' \
463      '(--stdin-name)--stdin-name[Assign a name if the file source is stdin.]' \
464      '(-H --hidden)'{-H,--hidden}'[Include files that are hidden. Only takes effect on recursive add.]' \
465      '(--ignore)--ignore[A rule (.gitignore-stype) defining which file(s) should be ignored (variadic, experimental).]' \
466      '(--ignore-rules-path)--ignore-rules-path[A path to a file with .gitignore-style ignore rules (experimental).]' \
467      '(-q --quiet)'{-q,--quiet}'[Write minimal output.]' \
468      '(-Q --quieter)'{-Q,--quieter}'[Write only final hash.]' \
469      '(--silent)--silent[Write no output.]' \
470      '(-p --progress)'{-p,--progress}'[Stream progress data.]' \
471      '(-t --trickle)'{-t,--trickle}'[Use trickle-dag format for dag generation.]' \
472      '(-n --only-hash)'{-n,--only-hash}'[Only chunk and hash - do not write to disk.]' \
473      '(-w --wrap-with-directory)'{-w,--wrap-with-directory}'[Wrap files with a directory object.]' \
474      '(-s --chunker)'{-s,--chunker}'[Chunking algorithm, size-(bytes) or rabin-(min)-(avg)-(max). Default: size-262144.]' \
475      '(--pin)--pin[Pin this object when adding. Default: true.]' \
476      '(--raw-leaves)--raw-leaves[Use raw blocks for leaf nodes. (experimental).]' \
477      '(--nocopy)--nocopy[Add the file using filestore. Implies raw-leaves. (experimental).]' \
478      '(--fscache)--fscache[Check the filestore for pre-existing blocks. (experimental).]' \
479      '(--cid-version)--cid-version[CID version. Defaults to 0 unless an option that depends on CIDv1 is passed. (experimental).]' \
480      '(--hash)--hash[Hash function to use. Implies CIDv1 if not sha2-256. (experimental). Default: sha2-256.]' \
481      '(--inline)--inline[Inline small blocks into CIDs. (experimental).]' \
482      '(--inline-limit)--inline-limit[Maximum block size to inline. (experimental). Default: 32.]'
483  ;;
484  (bitswap)
485    local -a _bitswap_arguments
486    _bitswap_arguments=(
487      'ledger:Show the current ledger for a peer.'
488      'reprovide:Trigger reprovider.'
489      'stat:Show some diagnostic information on the bitswap agent.'
490      'wantlist:Show blocks currently on the wantlist.'
491    )
492    _ipfs_subcommand _bitswap_arguments
493  ;;
494  (block)
495    local -a _block_arguments
496    _block_arguments=(
497      'get:Get a raw IPFS block.'
498      'put:Store input as an IPFS block.'
499      'rm:Remove IPFS block(s).'
500      'stat:Print information of a raw IPFS block.'
501    )
502    _ipfs_subcommand _block_arguments
503  ;;
504  (bootstrap)
505    local -a _bootstrap_arguments
506    _bootstrap_arguments=(
507      'add:Add peers to the bootstrap list.'
508      'list:Show peers in the bootstrap list.'
509      'rm:Remove peers from the bootstrap list.'
510    )
511    _ipfs_subcommand _bootstrap_arguments
512  ;;
513  (cat)
514    _arguments \
515      '(-o --offset)'{-o,--offset}'[Byte offset to begin reading from.]' \
516      '(-l --length)'{-l,--length}'[Maximum number of bytes to read.]'
517  ;;
518  (cid)
519    local -a _cid_arguments
520    _cid_arguments=(
521      'base32:Convert CIDs to Base32 CID version 1.'
522      'bases:List available multibase encodings.'
523      'codecs:List available CID codecs.'
524      'format:Format and convert a CID in various useful ways.'
525      'hashes:List available multihashes.'
526    )
527    _ipfs_subcommand _cid_arguments
528  ;;
529  (commands)
530    _arguments '(-f --flags)'{-f,--flags}'[Show command flags.]'
531  ;;
532  (config)
533    _arguments \
534      '--bool[Set a boolean value.]' \
535      '--json[Parse stringified JSON.]'
536    local -a _config_arguments
537    _config_arguments=(
538      'edit:Open the config file for editing in $EDITOR.'
539      'profile:Apply profiles to config.'
540      'replace:Replace the config with <file>.'
541      'show:Output config file contents.'
542    )
543    _ipfs_subcommand _config_arguments
544  ;;
545  (daemon)
546    _arguments \
547      '--init[Initialize ipfs with default settings if not already initialized.]' \
548      '--init-config[Path to existing configuration file to be loaded during --init.]' \
549      '--init-profile[Configuration profiles to apply for --init. See ipfs init --help for more.]' \
550      '--routing[Overrides the routing option. Default: default.]' \
551      '--mount[Mounts IPFS to the filesystem.]' \
552      '--writable[Enable writing objects (with POST, PUT and DELETE).]' \
553      '--mount-ipfs[Path to the mountpoint for IPFS (if using --mount). Defaults to config setting.]' \
554      '--mount-ipns[Path to the mountpoint for IPNS (if using --mount). Defaults to config setting.]' \
555      '--unrestricted-api[Allow API access to unlisted hashes.]' \
556      '--disable-transport-encryption[Disable transport encryption (for debugging protocols).]' \
557      '--enable-gc[Enable automatic periodic repo garbage collection.]' \
558      '--manage-fdlimit[Check and raise file descriptor limits if needed. Default: true.]' \
559      '--migrate[If true, assume yes at the migrate prompt. If false, assume no.]' \
560      '--enable-pubsub-experiment[Instantiate the ipfs daemon with the experimental pubsub feature enabled.]' \
561      '--enable-namesys-pubsub[Enable IPNS record distribution through pubsub; enables pubsub.]' \
562      '--enable-mplex-experiment[Add the experimental 'go-multiplex' stream muxer to libp2p on construction. Default: true.]'
563  ;;
564  (dag)
565    local -a _dag_arguments
566    _dag_arguments=(
567      'export:Streams the selected DAG as a .car stream on stdout.'
568      'get:Get a dag node from ipfs.'
569      'import:Import the contents of .car files'
570      'put:Add a dag node to ipfs.'
571      'resolve:Resolve ipld block.'
572      'stat:Gets stats for a DAG'
573    )
574    _ipfs_subcommand _dag_arguments
575  ;;
576  (dht)
577    local -a _dht_arguments
578    _dht_arguments=(
579      'findpeer:Find the multiaddresses associated with a Peer ID.'
580      'findprovs:Find peers that can provide a specific value, given a key.'
581      'get:Given a key, query the routing system for its best value.'
582      'provide:Announce to the network that you are providing given values.'
583      'put:Write a key/value pair to the routing system.'
584      'query:Find the closest Peer IDs to a given Peer ID by querying the DHT.'
585    )
586    _ipfs_subcommand _dht_arguments
587  ;;
588  (diag)
589    local -a _diag_arguments
590    _diag_arguments=(
591      'cmds:List commands run on this IPFS node.'
592      'sys:Print system diagnostic information.'
593    )
594    _ipfs_subcommand _diag_arguments
595  ;;
596  (dns)
597    _arguments '(-r --recursive)'{-r,--recursive}'[Resolve until the result is not a DNS link. Default: true.]'
598  ;;
599  (files)
600    _arguments '(-f --flush)'{-f,--flush}'[Flush target and ancestors after write. Default: true.]'
601    local -a _files_arguments
602    _files_arguments=(
603      'chcid:Change the cid version or hash function of the root node of a given path.'
604      'cp:Copy files into mfs.'
605      "flush:Flush a given path's data to disk."
606      'ls:List directories in the local mutable namespace.'
607      'mkdir:Make directories.'
608      'mv:Move files.'
609      'read:Read a file in a given mfs.'
610      'rm:Remove a file.'
611      'stat:Display file status.'
612      'write:Write to a mutable file in a given filesystem.'
613    )
614    _ipfs_subcommand _files_arguments
615  ;;
616  (filestore)
617    local -a _filestore_arguments
618    _filestore_arguments=(
619      'dups:List blocks that are both in the filestore and standard block storage.'
620      'ls:List objects in filestore.'
621      'verify:Verify objects in filestore.'
622    )
623    _ipfs_subcommand _filestore_arguments
624  ;;
625  (get)
626    _arguments \
627      '(-o --output)'{-o,--output}'[The path where the output should be stored.]'\
628      '(-a --archive)'{-a,--archive}'[Output a TAR archive.]' \
629      '(-C --compress)'{-C,--compress}'[Compress the output with GZIP compression.]' \
630      '(-l --compression-level)'{-l,--compression-level}'[The level of compression (1-9).]'
631  ;;
632  (id)
633    _arguments \
634      '(-f --format)'{-f,--format}'[Optional output format.]' \
635      '--peerid-base[Encoding used for peer IDs: Can either be a multibase encoded CID or a base58btc encoded multihash. Takes {b58mh|base36|k|base32|b...}. Default: b58mh.]'
636  ;;
637  (init)
638    _arguments \
639      '(-a --algorithm)'{-a, --algorithm}'[Cryptographic algorithm to use for key generation. Default: ed25519.]' \
640      '(-b --bits)'{-b,--bits}'[Number of bits to use in the generated RSA private key.]' \
641      '(-e --empty-repo)'{-e,--empty-repo}"[Don't add and pin help files to the local storage.]" \
642      '(-p --profile)'{-p,--profile}"[Apply profile settings to config. Multiple profiles can be separated by ','.]"
643  ;;
644  (key)
645    local -a _key_arguments
646    _key_arguments=(
647      'export:Export a keypair'
648      'gen:Create a new keypair'
649      'import:Import a key and prints imported key id'
650      'list:List all local keypairs'
651      'rename:Rename a keypair'
652      'rm:Remove a keypair'
653      'rotate:Rotates the ipfs identity.'
654    )
655    _ipfs_subcommand _key_arguments
656  ;;
657  (log)
658    local -a _log_arguments
659    _log_arguments=(
660      'level:Change the logging level.'
661      'ls:List the logging subsystems.'
662      'tail:Read the event log.'
663    )
664    _ipfs_subcommand _log_arguments
665  ;;
666  (ls)
667    _arguments \
668      '(-v --headers)'{-v,--headers}'[Print table headers (Hash, Size, Name).]' \
669      '--resolve-type[Resolve linked objects to find out their types. Default: true.]' \
670      '--size[Resolve linked objects to find out their file size. Default: true.]' \
671      '(-s --stream)'{-s,--stream}'[Enable experimental streaming of directory entries as they are traversed.]' \
672  ;;
673  (mount)
674    _arguments \
675      '(-f --ipfs-path)'{-f,--ipfs-path}'[The path where IPFS should be mounted.]' \
676      '(-n --ipns-path)'{-n,--ipns-path}'[The path where IPNS should be mounted.]'
677  ;;
678  (name)
679    local -a _name_arguments
680    _name_arguments=(
681      'publish:Publish IPNS names.'
682      'pubsub:IPNS pubsub management.'
683      'resolve:Resolve IPNS names.'
684    )
685    _ipfs_subcommand _name_arguments
686  ;;
687  (object)
688    local -a _object_arguments
689    _object_arguments=(
690      'data:Output the raw bytes of an IPFS object.'
691      'diff:Display the diff between two ipfs objects.'
692      'get:Get and serialize the DAG node named by <key>.'
693      'links:Output the links pointed to by the specified object.'
694      'new:Create a new object from an ipfs template.'
695      'patch:Create a new merkledag object based on an existing one.'
696      'put:Store input as a DAG object, print its key.'
697      'stat:Get stats for the DAG node named by <key>.'
698    )
699    _ipfs_subcommand _object_arguments
700  ;;
701  (p2p)
702    local -a _p2p_arguments
703    _p2p_arguments=(
704      'close:Stop listening for new connections to forward.'
705      'forward:Forward connections to libp2p service'
706      'listen:Create libp2p service'
707      'ls:List active p2p listeners.'
708      'stream:P2P stream management.'
709    )
710    _ipfs_subcommand _p2p_arguments
711  ;;
712  (pin)
713    local -a _pin_arguments
714    _pin_arguments=(
715      'add:Pin objects to local storage.'
716      'ls:List objects pinned to local storage.'
717      'remote:Pin (and unpin) objects to remote pinning service.'
718      'rm:Remove pinned objects from local storage.'
719      'update:Update a recursive pin'
720      'verify:Verify that recursive pins are complete.'
721    )
722    _ipfs_subcommand _pin_arguments
723  ;;
724  (ping)
725    _arguments '(-n --count)'{-n,--count}'[Number of ping messages to send. Default: 10.]'
726  ;;
727  (refs)
728    _arguments \
729      '--format[Emit edges with given format. Available tokens: <src> <dst> <linkname>. Default: <dst>.]' \
730      '(-e --edges)'{-e,--edges}'[Emit edge format: `<from> -> <to>`.]' \
731      '(-u --unique)'{-u,--unique}'[Omit duplicate refs from output.]' \
732      '(-r --recursive)'{-r,--recursive}'[Recursively list links of child nodes.]' \
733      '--max-depth[Only for recursive refs, limits fetch and listing to the given depth. Default: -1.]'
734    local -a _refs_arguments
735    _refs_arguments='local:List all local references.'
736    _ipfs_subcommand _refs_arguments
737  ;;
738  (repo)
739    local -a _repo_arguments
740    _repo_arguments=(
741      'fsck:Remove repo lockfiles.'
742      'gc:Perform a garbage collection sweep on the repo.'
743      'stat:Get stats for the currently used repo.'
744      'verify:Verify all blocks in repo are not corrupted.'
745      'version:Show the repo version.'
746    )
747    _ipfs_subcommand _repo_arguments
748  ;;
749  (resolve)
750    _arguments \
751      '(-r --recursive)'{-r,--recursive}'[Resolve until the result is an IPFS name. Default: true.]' \
752      '(--dhtrc --dht-record-count)'{--dhtrc,--dht-record-count}'[Number of records to request for DHT resolution.]' \
753      '(--dhtt --dht-timeout)'{--dhtt,--dht-timeout}'[Max time to collect values during DHT resolution eg "30s". Pass 0 for no timeout.]'
754  ;;
755  (stats)
756    local -a _stats_arguments
757    _stats_arguments=(
758      'bitswap:Show some diagnostic information on the bitswap agent.'
759      'bw:Print ipfs bandwidth information.'
760      "dht:Returns statistics about the node's DHT(s)"
761      'repo:Get stats for the currently used repo.'
762    )
763    _ipfs_subcommand _stats_arguments
764  ;;
765  (swarm)
766    local -a _swarm_arguments
767    _swarm_arguments=(
768      'addrs:List known addresses. Useful for debugging.'
769      'connect:Open connection to a given address.'
770      'disconnect:Close connection to a given address.'
771      'filters:Manipulate address filters.'
772      'peers:List peers with open connections.'
773    )
774    _ipfs_subcommand _swarm_arguments
775  ;;
776  (tar)
777    local -a _tar_arguments
778    _tar_arguments=(
779      'add:Import a tar file into ipfs.'
780      'cat:Export a tar file from IPFS.'
781    )
782    _ipfs_subcommand _tar_arguments
783  ;;
784  (version)
785    _arguments \
786      '(-n --number)'{-n,--number}'[Only show the version number.]' \
787      '--commit[Show the commit hash.]' \
788      '--repo[Show repo version.]' \
789      '--all[Show all version information.]'
790  ;;
791esac