Documentation ¶
Index ¶
- Variables
- func CommandsCmd(root *cmds.Command) *cmds.Command
- func DefaultBootstrapPeers() ([]config.BootstrapPeer, error)
- func KeyListTextMarshaler(res cmds.Response) (io.Reader, error)
- func MessageTextMarshaler(res cmds.Response) (io.Reader, error)
- func Mount(node *core.IpfsNode, fsdir, nsdir string) error
- func ParsePeerParam(text string) (ma.Multiaddr, peer.ID, error)
- type AddedObject
- type BlockStat
- type BootstrapOutput
- type Command
- type ConfigField
- type DiagnosticConnection
- type DiagnosticOutput
- type DiagnosticPeer
- type ErrPassThroughReader
- type IdOutput
- type IpnsEntry
- type KeyList
- type Link
- type LsOutput
- type MessageOutput
- type Node
- type Object
- type PingResult
- type RefWriter
- type TestOutput
- type UpdateOutput
- type VersionOutput
Constants ¶
This section is empty.
Variables ¶
var AddCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Add an object to ipfs.", ShortDescription: ` Adds contents of <path> to ipfs. Use -r to add directories. Note that directories are added recursively, to form the ipfs MerkleDAG. A smarter partial add with a staging area (like git) remains to be implemented. `, }, Arguments: []cmds.Argument{ cmds.FileArg("path", true, true, "The path to a file to be added to IPFS").EnableRecursive().EnableStdin(), }, Options: []cmds.Option{ cmds.OptionRecursivePath, cmds.BoolOption("quiet", "q", "Write minimal output"), }, Run: func(req cmds.Request) (interface{}, error) { n, err := req.Context().GetNode() if err != nil { return nil, err } outChan := make(chan interface{}) go func() { defer close(outChan) for { file, err := req.Files().NextFile() if (err != nil && err != io.EOF) || file == nil { return } _, err = addFile(n, file, outChan) if err != nil { return } } }() return outChan, nil }, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { outChan, ok := res.Output().(chan interface{}) if !ok { return nil, u.ErrCast() } quiet, _, err := res.Request().Option("quiet").Bool() if err != nil { return nil, err } marshal := func(v interface{}) (io.Reader, error) { obj, ok := v.(*AddedObject) if !ok { return nil, u.ErrCast() } var buf bytes.Buffer if quiet { buf.WriteString(fmt.Sprintf("%s\n", obj.Hash)) } else { buf.WriteString(fmt.Sprintf("added %s %s\n", obj.Hash, obj.Name)) } return &buf, nil } return &cmds.ChannelMarshaler{ Channel: outChan, Marshaler: marshal, }, nil }, }, Type: AddedObject{}, }
var BlockCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Manipulate raw IPFS blocks", ShortDescription: ` 'ipfs block' is a plumbing command used to manipulate raw ipfs blocks. Reads from stdin or writes to stdout, and <key> is a base58 encoded multihash. `, }, Subcommands: map[string]*cmds.Command{ "stat": blockStatCmd, "get": blockGetCmd, "put": blockPutCmd, }, }
var BootstrapCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Show or edit the list of bootstrap peers", Synopsis: ` ipfs bootstrap list - Show peers in the bootstrap list ipfs bootstrap add <peer>... - Add peers to the bootstrap list ipfs bootstrap rm <peer>... - Removes peers from the bootstrap list `, ShortDescription: ` Running 'ipfs bootstrap' with no arguments will run 'ipfs bootstrap list'. ` + bootstrapSecurityWarning, }, Run: bootstrapListCmd.Run, Marshalers: bootstrapListCmd.Marshalers, Type: bootstrapListCmd.Type, Subcommands: map[string]*cmds.Command{ "list": bootstrapListCmd, "add": bootstrapAddCmd, "rm": bootstrapRemoveCmd, }, }
var CatCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Show IPFS object data", ShortDescription: ` Retrieves the object named by <ipfs-path> and outputs the data it contains. `, }, Arguments: []cmds.Argument{ cmds.StringArg("ipfs-path", true, true, "The path to the IPFS object(s) to be outputted").EnableStdin(), }, Run: func(req cmds.Request) (interface{}, error) { node, err := req.Context().GetNode() if err != nil { return nil, err } readers := make([]io.Reader, 0, len(req.Arguments())) readers, err = cat(node, req.Arguments()) if err != nil { return nil, err } reader := io.MultiReader(readers...) return reader, nil }, }
var CommandsDaemonCmd = CommandsCmd(Root)
commandsDaemonCmd is the "ipfs commands" command for daemon
var ConfigCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "get and set IPFS config values", Synopsis: ` ipfs config <key> - Get value of <key> ipfs config <key> <value> - Set value of <key> to <value> ipfs config show - Show config file ipfs config edit - Edit config file in $EDITOR `, ShortDescription: ` ipfs config controls configuration variables. It works like 'git config'. The configuration values are stored in a config file inside your IPFS repository.`, LongDescription: ` ipfs config controls configuration variables. It works much like 'git config'. The configuration values are stored in a config file inside your IPFS repository. EXAMPLES: Get the value of the 'datastore.path' key: ipfs config datastore.path Set the value of the 'datastore.path' key: ipfs config datastore.path ~/.go-ipfs/datastore `, }, Arguments: []cmds.Argument{ cmds.StringArg("key", true, false, "The key of the config entry (e.g. \"Addresses.API\")"), cmds.StringArg("value", false, false, "The value to set the config entry to"), }, Run: func(req cmds.Request) (interface{}, error) { args := req.Arguments() key := args[0] r := fsrepo.At(req.Context().ConfigRoot) if err := r.Open(); err != nil { return nil, err } defer r.Close() var value string if len(args) == 2 { value = args[1] return setConfig(r, key, value) } else { return getConfig(r, key) } }, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { if len(res.Request().Arguments()) == 2 { return nil, nil } v := res.Output() if v == nil { k := res.Request().Arguments()[0] return nil, fmt.Errorf("config does not contain key: %s", k) } vf, ok := v.(*ConfigField) if !ok { return nil, u.ErrCast() } buf, err := config.HumanOutput(vf.Value) if err != nil { return nil, err } buf = append(buf, byte('\n')) return bytes.NewReader(buf), nil }, }, Type: ConfigField{}, Subcommands: map[string]*cmds.Command{ "show": configShowCmd, "edit": configEditCmd, }, }
var DefaultBootstrapAddresses = []string{
"/ip4/104.131.131.82/tcp/4001/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
"/ip4/104.236.176.52/tcp/4001/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z",
"/ip4/104.236.179.241/tcp/4001/QmSoLpPVmHKQ4XTPdz8tjDFgdeRFkpV8JgYq8JVJ69RrZm",
"/ip4/162.243.248.213/tcp/4001/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm",
"/ip4/128.199.219.111/tcp/4001/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu",
}
DefaultBootstrapAddresses are the hardcoded bootstrap addresses for ipfs. they are nodes run by the ipfs team. docs on these later. As with all p2p networks, bootstrap is an important security concern.
Note: this is here -- and not inside cmd/ipfs/init.go -- because of an import dependency issue. TODO: move this into a config/default/ package.
var DiagCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Generates diagnostic reports", }, Subcommands: map[string]*cmds.Command{ "net": diagNetCmd, }, }
var ErrDepthLimitExceeded = fmt.Errorf("depth limit exceeded")
Error indicating the max depth has been exceded.
var ErrObjectTooLarge = errors.New("input object was too large. limit is 512kbytes")
ErrObjectTooLarge is returned when too much data was read from stdin. current limit 512k
var ErrUnknownObjectEnc = errors.New("unknown object encoding")
ErrUnknownObjectEnc is returned if a invalid encoding is supplied
var IDCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Show IPFS Node ID info", ShortDescription: ` Prints out information about the specified peer, if no peer is specified, prints out local peers info. `, }, Arguments: []cmds.Argument{ cmds.StringArg("peerid", false, false, "peer.ID of node to look up").EnableStdin(), }, Run: func(req cmds.Request) (interface{}, error) { node, err := req.Context().GetNode() if err != nil { return nil, err } if len(req.Arguments()) == 0 { return printPeer(node.Peerstore, node.Identity) } pid := req.Arguments()[0] id := peer.ID(b58.Decode(pid)) if len(id) == 0 { return nil, cmds.ClientError("Invalid peer id") } ctx, _ := context.WithTimeout(context.TODO(), time.Second*5) if !node.OnlineMode() { return nil, errors.New(offlineIdErrorMessage) } p, err := node.Routing.FindPeer(ctx, id) if err == kb.ErrLookupFailure { return nil, errors.New(offlineIdErrorMessage) } if err != nil { return nil, err } return printPeer(node.Peerstore, p.ID) }, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { val, ok := res.Output().(*IdOutput) if !ok { return nil, u.ErrCast() } marshaled, err := json.MarshalIndent(val, "", "\t") if err != nil { return nil, err } return bytes.NewReader(marshaled), nil }, }, Type: IdOutput{}, }
var LogCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Change the logging level", ShortDescription: ` 'ipfs log' is a utility command used to change the logging output of a running daemon. `, }, Arguments: []cmds.Argument{ cmds.StringArg("subsystem", true, false, fmt.Sprintf("the subsystem logging identifier. Use '%s' for all subsystems.", logAllKeyword)), cmds.StringArg("level", true, false, "one of: debug, info, notice, warning, error, critical"), }, Run: func(req cmds.Request) (interface{}, error) { args := req.Arguments() subsystem, level := args[0], args[1] if subsystem == logAllKeyword { subsystem = "*" } if err := u.SetLogLevel(subsystem, level); err != nil { return nil, err } s := fmt.Sprintf("Changed log level of '%s' to '%s'", subsystem, level) log.Info(s) return &MessageOutput{s}, nil }, Marshalers: cmds.MarshalerMap{ cmds.Text: MessageTextMarshaler, }, Type: MessageOutput{}, }
var LsCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "List links from an object.", ShortDescription: ` Retrieves the object named by <ipfs-path> and displays the links it contains, with the following format: <link base58 hash> <link size in bytes> <link name> `, }, Arguments: []cmds.Argument{ cmds.StringArg("ipfs-path", true, true, "The path to the IPFS object(s) to list links from").EnableStdin(), }, Run: func(req cmds.Request) (interface{}, error) { node, err := req.Context().GetNode() if err != nil { return nil, err } paths := req.Arguments() dagnodes := make([]*merkledag.Node, 0) for _, path := range paths { dagnode, err := node.Resolver.ResolvePath(path) if err != nil { return nil, err } dagnodes = append(dagnodes, dagnode) } output := make([]Object, len(req.Arguments())) for i, dagnode := range dagnodes { output[i] = Object{ Hash: paths[i], Links: make([]Link, len(dagnode.Links)), } for j, link := range dagnode.Links { output[i].Links[j] = Link{ Name: link.Name, Hash: link.Hash.B58String(), Size: link.Size, } } } return &LsOutput{output}, nil }, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { s := "" output := res.Output().(*LsOutput).Objects for _, object := range output { if len(output) > 1 { s += fmt.Sprintf("%s:\n", object.Hash) } s += marshalLinks(object.Links) if len(output) > 1 { s += "\n" } } return strings.NewReader(s), nil }, }, Type: LsOutput{}, }
var MountCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Mounts IPFS to the filesystem (read-only)", Synopsis: ` ipfs mount [-f <ipfs mount path>] [-n <ipns mount path>] `, ShortDescription: ` Mount ipfs at a read-only mountpoint on the OS (default: /ipfs and /ipns). All ipfs objects will be accessible under that directory. Note that the root will not be listable, as it is virtual. Access known paths directly. You may have to create /ipfs and /ipfs before using 'ipfs mount': > sudo mkdir /ipfs /ipns > sudo chown ` + "`" + `whoami` + "`" + ` /ipfs /ipns > ipfs daemon & > ipfs mount `, LongDescription: ` Mount ipfs at a read-only mountpoint on the OS (default: /ipfs and /ipns). All ipfs objects will be accessible under that directory. Note that the root will not be listable, as it is virtual. Access known paths directly. You may have to create /ipfs and /ipfs before using 'ipfs mount': > sudo mkdir /ipfs /ipns > sudo chown ` + "`" + `whoami` + "`" + ` /ipfs /ipns > ipfs daemon & > ipfs mount EXAMPLE: # setup > mkdir foo > echo "baz" > foo/bar > ipfs add -r foo added QmWLdkp93sNxGRjnFHPaYg8tCQ35NBY3XPn6KiETd3Z4WR foo/bar added QmSh5e7S6fdcu75LAbXNZAFY2nGyZUJXyLCJDvn2zRkWyC foo > ipfs ls QmSh5e7S6fdcu75LAbXNZAFY2nGyZUJXyLCJDvn2zRkWyC QmWLdkp93sNxGRjnFHPaYg8tCQ35NBY3XPn6KiETd3Z4WR 12 bar > ipfs cat QmWLdkp93sNxGRjnFHPaYg8tCQ35NBY3XPn6KiETd3Z4WR baz # mount > ipfs daemon & > ipfs mount IPFS mounted at: /ipfs IPNS mounted at: /ipns > cd /ipfs/QmSh5e7S6fdcu75LAbXNZAFY2nGyZUJXyLCJDvn2zRkWyC > ls bar > cat bar baz > cat /ipfs/QmSh5e7S6fdcu75LAbXNZAFY2nGyZUJXyLCJDvn2zRkWyC/bar baz > cat /ipfs/QmWLdkp93sNxGRjnFHPaYg8tCQ35NBY3XPn6KiETd3Z4WR baz `, }, Options: []cmds.Option{ cmds.StringOption("f", "The path where IPFS should be mounted"), cmds.StringOption("n", "The path where IPNS should be mounted"), }, Run: func(req cmds.Request) (interface{}, error) { cfg, err := req.Context().GetConfig() if err != nil { return nil, err } node, err := req.Context().GetNode() if err != nil { return nil, err } if !node.OnlineMode() { return nil, errNotOnline } fsdir, found, err := req.Option("f").String() if err != nil { return nil, err } if !found { fsdir = cfg.Mounts.IPFS } nsdir, found, err := req.Option("n").String() if err != nil { return nil, err } if !found { nsdir = cfg.Mounts.IPNS } err = Mount(node, fsdir, nsdir) if err != nil { return nil, err } var output config.Mounts output.IPFS = fsdir output.IPNS = nsdir return &output, nil }, Type: config.Mounts{}, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { v := res.Output().(*config.Mounts) s := fmt.Sprintf("IPFS mounted at: %s\n", v.IPFS) s += fmt.Sprintf("IPNS mounted at: %s\n", v.IPNS) return strings.NewReader(s), nil }, }, }
var NameCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "IPFS namespace (IPNS) tool", Synopsis: ` ipfs name publish [<name>] <ipfs-path> - Publish an object to IPNS ipfs name resolve [<name>] - Gets the value currently published at an IPNS name `, ShortDescription: ` IPNS is a PKI namespace, where names are the hashes of public keys, and the private key enables publishing new (signed) values. In both publish and resolve, the default value of <name> is your own identity public key. `, LongDescription: ` IPNS is a PKI namespace, where names are the hashes of public keys, and the private key enables publishing new (signed) values. In both publish and resolve, the default value of <name> is your own identity public key. Examples: Publish a <ref> to your identity name: > ipfs name publish QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy published name QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n to QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Publish a <ref> to another public key: > ipfs name publish QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy published name QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n to QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Resolve the value of your identity: > ipfs name resolve QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy Resolve the value of another name: > ipfs name resolve QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy `, }, Subcommands: map[string]*cmds.Command{ "publish": publishCmd, "resolve": resolveCmd, }, }
var ObjectCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Interact with ipfs objects", ShortDescription: ` 'ipfs object' is a plumbing command used to manipulate DAG objects directly.`, Synopsis: ` ipfs object get <key> - Get the DAG node named by <key> ipfs object put <data> <encoding> - Stores input, outputs its key ipfs object data <key> - Outputs raw bytes in an object ipfs object links <key> - Outputs links pointed to by object ipfs object stat <key> - Outputs statistics of object `, }, Subcommands: map[string]*cmds.Command{ "data": objectDataCmd, "links": objectLinksCmd, "get": objectGetCmd, "put": objectPutCmd, "stat": objectStatCmd, }, }
var PinCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Pin (and unpin) objects to local storage", }, Subcommands: map[string]*cmds.Command{ "add": addPinCmd, "rm": rmPinCmd, "ls": listPinCmd, }, }
var PingCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "send echo request packets to IPFS hosts", Synopsis: ` Send pings to a peer using the routing system to discover its address `, ShortDescription: ` ipfs ping is a tool to test sending data to other nodes. It finds nodes via the routing system, send pings, wait for pongs, and print out round- trip latency information. `, }, Arguments: []cmds.Argument{ cmds.StringArg("peer ID", true, true, "ID of peer to be pinged").EnableStdin(), }, Options: []cmds.Option{ cmds.IntOption("count", "n", "number of ping messages to send"), }, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { outChan, ok := res.Output().(chan interface{}) if !ok { return nil, u.ErrCast() } marshal := func(v interface{}) (io.Reader, error) { obj, ok := v.(*PingResult) if !ok { return nil, u.ErrCast() } buf := new(bytes.Buffer) if len(obj.Text) > 0 { buf = bytes.NewBufferString(obj.Text + "\n") } else if obj.Success { fmt.Fprintf(buf, "Pong received: time=%.2f ms\n", obj.Time.Seconds()*1000) } else { fmt.Fprintf(buf, "Pong failed\n") } return buf, nil } return &cmds.ChannelMarshaler{ Channel: outChan, Marshaler: marshal, }, nil }, }, Run: func(req cmds.Request) (interface{}, error) { ctx := req.Context().Context n, err := req.Context().GetNode() if err != nil { return nil, err } if !n.OnlineMode() { return nil, errNotOnline } addr, peerID, err := ParsePeerParam(req.Arguments()[0]) if err != nil { return nil, err } if addr != nil { n.Peerstore.AddAddress(peerID, addr) } numPings := 10 val, found, err := req.Option("count").Int() if err != nil { return nil, err } if found { numPings = val } outChan := make(chan interface{}) go pingPeer(ctx, n, peerID, numPings, outChan) return outChan, nil }, Type: PingResult{}, }
var RefsCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Lists links (references) from an object", ShortDescription: ` Retrieves the object named by <ipfs-path> and displays the link hashes it contains, with the following format: <link base58 hash> Note: list all refs recursively with -r. `, }, Subcommands: map[string]*cmds.Command{ "local": RefsLocalCmd, }, Arguments: []cmds.Argument{ cmds.StringArg("ipfs-path", true, true, "Path to the object(s) to list refs from").EnableStdin(), }, Options: []cmds.Option{ cmds.StringOption("format", "Emit edges with given format. tokens: <src> <dst> <linkname>"), cmds.BoolOption("edges", "e", "Emit edge format: `<from> -> <to>`"), cmds.BoolOption("unique", "u", "Omit duplicate refs from output"), cmds.BoolOption("recursive", "r", "Recursively list links of child nodes"), }, Run: func(req cmds.Request) (interface{}, error) { ctx := req.Context().Context n, err := req.Context().GetNode() if err != nil { return nil, err } unique, _, err := req.Option("unique").Bool() if err != nil { return nil, err } recursive, _, err := req.Option("recursive").Bool() if err != nil { return nil, err } edges, _, err := req.Option("edges").Bool() if err != nil { return nil, err } format, _, err := req.Option("format").String() if err != nil { return nil, err } objs, err := objectsForPaths(n, req.Arguments()) if err != nil { return nil, err } piper, pipew := io.Pipe() eptr := &ErrPassThroughReader{R: piper} go func() { defer pipew.Close() rw := RefWriter{ W: pipew, DAG: n.DAG, Ctx: ctx, Unique: unique, PrintEdge: edges, PrintFmt: format, Recursive: recursive, } for _, o := range objs { if _, err := rw.WriteRefs(o); err != nil { log.Error(err) eptr.SetError(err) return } } }() return eptr, nil }, }
var RefsLocalCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Lists all local references", ShortDescription: ` Displays the hashes of all local objects. `, }, Run: func(req cmds.Request) (interface{}, error) { ctx := req.Context().Context n, err := req.Context().GetNode() if err != nil { return nil, err } allKeys, err := n.Blockstore.AllKeysChan(ctx, 0, 0) if err != nil { return nil, err } piper, pipew := io.Pipe() eptr := &ErrPassThroughReader{R: piper} go func() { defer pipew.Close() for k := range allKeys { s := k.Pretty() + "\n" if _, err := pipew.Write([]byte(s)); err != nil { log.Error(err) eptr.SetError(err) return } } }() return eptr, nil }, }
var Root = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "global p2p merkle-dag filesystem", Synopsis: ` ipfs [<flags>] <command> [<arg>] ... `, ShortDescription: ` Basic commands: init Initialize ipfs local configuration add <path> Add an object to ipfs cat <ref> Show ipfs object data ls <ref> List links from an object Tool commands: config Manage configuration update Download and apply go-ipfs updates version Show ipfs version information commands List all available commands id Show info about ipfs peers Advanced Commands: daemon Start a long-running daemon process mount Mount an ipfs read-only mountpoint serve Serve an interface to ipfs diag Print diagnostics Plumbing commands: block Interact with raw blocks in the datastore object Interact with raw dag nodes Use 'ipfs <command> --help' to learn more about each command. `, }, Options: []cmds.Option{ cmds.StringOption("config", "c", "Path to the configuration file to use"), cmds.BoolOption("debug", "D", "Operate in debug mode"), cmds.BoolOption("help", "Show the full command help text"), cmds.BoolOption("h", "Show a short version of the command help text"), cmds.BoolOption("local", "L", "Run the command locally, instead of using the daemon"), }, }
var SwarmCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "swarm inspection tool", Synopsis: ` ipfs swarm peers - List peers with open connections ipfs swarm connect <address> - Open connection to a given peer `, ShortDescription: ` ipfs swarm is a tool to manipulate the network swarm. The swarm is the component that opens, listens for, and maintains connections to other ipfs peers in the internet. `, }, Subcommands: map[string]*cmds.Command{ "peers": swarmPeersCmd, "connect": swarmConnectCmd, }, }
var UpdateCheckCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Checks if updates are available", ShortDescription: "'ipfs update check' checks if any updates are available for IPFS.\nNothing will be downloaded or installed.", }, Run: func(req cmds.Request) (interface{}, error) { n, err := req.Context().GetNode() if err != nil { return nil, err } return updateCheck(n) }, Type: UpdateOutput{}, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { v := res.Output().(*UpdateOutput) var buf bytes.Buffer if v.NewVersion != v.OldVersion { buf.WriteString(fmt.Sprintf("A new version of IPFS is available ('%s', currently running '%s')\n", v.NewVersion, v.OldVersion)) } else { buf.WriteString(fmt.Sprintf("Already updated to latest version ('%s')\n", v.NewVersion)) } return &buf, nil }, }, }
var UpdateCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Downloads and installs updates for IPFS", ShortDescription: "ipfs update is a utility command used to check for updates and apply them.", }, Run: func(req cmds.Request) (interface{}, error) { n, err := req.Context().GetNode() if err != nil { return nil, err } return updateApply(n) }, Type: UpdateOutput{}, Subcommands: map[string]*cmds.Command{ "check": UpdateCheckCmd, "log": UpdateLogCmd, }, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { v := res.Output().(*UpdateOutput) var buf bytes.Buffer if v.NewVersion != v.OldVersion { buf.WriteString(fmt.Sprintf("Successfully updated to IPFS version '%s' (from '%s')\n", v.NewVersion, v.OldVersion)) } else { buf.WriteString(fmt.Sprintf("Already updated to latest version ('%s')\n", v.NewVersion)) } return &buf, nil }, }, }
var UpdateLogCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "List the changelog for the latest versions of IPFS", ShortDescription: "This command is not yet implemented.", }, Run: func(req cmds.Request) (interface{}, error) { n, err := req.Context().GetNode() if err != nil { return nil, err } return updateLog(n) }, }
var VersionCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Shows ipfs version information", ShortDescription: "Returns the current version of ipfs and exits.", }, Options: []cmds.Option{ cmds.BoolOption("number", "n", "Only show the version number"), }, Run: func(req cmds.Request) (interface{}, error) { return &VersionOutput{ Version: config.CurrentVersionNumber, }, nil }, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { v := res.Output().(*VersionOutput) number, found, err := res.Request().Option("number").Bool() if err != nil { return nil, err } if found && number { return strings.NewReader(fmt.Sprintln(v.Version)), nil } return strings.NewReader(fmt.Sprintf("ipfs version %s\n", v.Version)), nil }, }, Type: VersionOutput{}, }
Functions ¶
func CommandsCmd ¶
CommandsCmd takes in a root command, and returns a command that lists the subcommands in that root
func DefaultBootstrapPeers ¶
func DefaultBootstrapPeers() ([]config.BootstrapPeer, error)
DefaultBootstrapPeers returns the (parsed) set of default bootstrap peers. if it fails, it returns a meaningful error for the user. This is here (and not inside cmd/ipfs/init) because of module dependency problems.
func KeyListTextMarshaler ¶
KeyListTextMarshaler outputs a KeyList as plaintext, one key per line
Types ¶
type AddedObject ¶
type BootstrapOutput ¶
type BootstrapOutput struct {
Peers []config.BootstrapPeer
}
type ConfigField ¶
type ConfigField struct { Key string Value interface{} }
type DiagnosticConnection ¶
type DiagnosticOutput ¶
type DiagnosticOutput struct {
Peers []DiagnosticPeer
}
type DiagnosticPeer ¶
type DiagnosticPeer struct { ID string UptimeSeconds uint64 BandwidthBytesIn uint64 BandwidthBytesOut uint64 Connections []DiagnosticConnection }
type ErrPassThroughReader ¶
type ErrPassThroughReader struct { R io.ReadCloser sync.RWMutex // contains filtered or unexported fields }
ErrPassThroughReader is a reader that may return an externally set error.
func (*ErrPassThroughReader) Close ¶
func (r *ErrPassThroughReader) Close() error
func (*ErrPassThroughReader) Error ¶
func (r *ErrPassThroughReader) Error() error
func (*ErrPassThroughReader) SetError ¶
func (r *ErrPassThroughReader) SetError(err error)
type MessageOutput ¶
type MessageOutput struct {
Message string
}
type RefWriter ¶
type RefWriter struct { W io.Writer DAG dag.DAGService Ctx context.Context Unique bool Recursive bool PrintEdge bool PrintFmt string // contains filtered or unexported fields }
type TestOutput ¶
type UpdateOutput ¶
type VersionOutput ¶
type VersionOutput struct {
Version string
}