cmd/swarm: split flags and cli command declarations to the relevant files (#17896)
This commit is contained in:
		| @@ -29,7 +29,65 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| var salt = make([]byte, 32) | ||||
| var ( | ||||
| 	salt          = make([]byte, 32) | ||||
| 	accessCommand = cli.Command{ | ||||
| 		CustomHelpTemplate: helpTemplate, | ||||
| 		Name:               "access", | ||||
| 		Usage:              "encrypts a reference and embeds it into a root manifest", | ||||
| 		ArgsUsage:          "<ref>", | ||||
| 		Description:        "encrypts a reference and embeds it into a root manifest", | ||||
| 		Subcommands: []cli.Command{ | ||||
| 			{ | ||||
| 				CustomHelpTemplate: helpTemplate, | ||||
| 				Name:               "new", | ||||
| 				Usage:              "encrypts a reference and embeds it into a root manifest", | ||||
| 				ArgsUsage:          "<ref>", | ||||
| 				Description:        "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", | ||||
| 				Subcommands: []cli.Command{ | ||||
| 					{ | ||||
| 						Action:             accessNewPass, | ||||
| 						CustomHelpTemplate: helpTemplate, | ||||
| 						Flags: []cli.Flag{ | ||||
| 							utils.PasswordFileFlag, | ||||
| 							SwarmDryRunFlag, | ||||
| 						}, | ||||
| 						Name:        "pass", | ||||
| 						Usage:       "encrypts a reference with a password and embeds it into a root manifest", | ||||
| 						ArgsUsage:   "<ref>", | ||||
| 						Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", | ||||
| 					}, | ||||
| 					{ | ||||
| 						Action:             accessNewPK, | ||||
| 						CustomHelpTemplate: helpTemplate, | ||||
| 						Flags: []cli.Flag{ | ||||
| 							utils.PasswordFileFlag, | ||||
| 							SwarmDryRunFlag, | ||||
| 							SwarmAccessGrantKeyFlag, | ||||
| 						}, | ||||
| 						Name:        "pk", | ||||
| 						Usage:       "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest", | ||||
| 						ArgsUsage:   "<ref>", | ||||
| 						Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", | ||||
| 					}, | ||||
| 					{ | ||||
| 						Action:             accessNewACT, | ||||
| 						CustomHelpTemplate: helpTemplate, | ||||
| 						Flags: []cli.Flag{ | ||||
| 							SwarmAccessGrantKeysFlag, | ||||
| 							SwarmDryRunFlag, | ||||
| 							utils.PasswordFileFlag, | ||||
| 						}, | ||||
| 						Name:        "act", | ||||
| 						Usage:       "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest", | ||||
| 						ArgsUsage:   "<ref>", | ||||
| 						Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	if _, err := io.ReadFull(rand.Reader, salt); err != nil { | ||||
|   | ||||
| @@ -29,6 +29,48 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| var dbCommand = cli.Command{ | ||||
| 	Name:               "db", | ||||
| 	CustomHelpTemplate: helpTemplate, | ||||
| 	Usage:              "manage the local chunk database", | ||||
| 	ArgsUsage:          "db COMMAND", | ||||
| 	Description:        "Manage the local chunk database", | ||||
| 	Subcommands: []cli.Command{ | ||||
| 		{ | ||||
| 			Action:             dbExport, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "export", | ||||
| 			Usage:              "export a local chunk database as a tar archive (use - to send to stdout)", | ||||
| 			ArgsUsage:          "<chunkdb> <file>", | ||||
| 			Description: ` | ||||
| Export a local chunk database as a tar archive (use - to send to stdout). | ||||
|  | ||||
|     swarm db export ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar | ||||
|  | ||||
| The export may be quite large, consider piping the output through the Unix | ||||
| pv(1) tool to get a progress bar: | ||||
|  | ||||
|     swarm db export ~/.ethereum/swarm/bzz-KEY/chunks - | pv > chunks.tar | ||||
| `, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             dbImport, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "import", | ||||
| 			Usage:              "import chunks from a tar archive into a local chunk database (use - to read from stdin)", | ||||
| 			ArgsUsage:          "<chunkdb> <file>", | ||||
| 			Description: `Import chunks from a tar archive into a local chunk database (use - to read from stdin). | ||||
|  | ||||
|     swarm db import ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar | ||||
|  | ||||
| The import may be quite large, consider piping the input through the Unix | ||||
| pv(1) tool to get a progress bar: | ||||
|  | ||||
|     pv chunks.tar | swarm db import ~/.ethereum/swarm/bzz-KEY/chunks -`, | ||||
| 		}, | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func dbExport(ctx *cli.Context) { | ||||
| 	args := ctx.Args() | ||||
| 	if len(args) != 3 { | ||||
|   | ||||
| @@ -28,6 +28,15 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| var downloadCommand = cli.Command{ | ||||
| 	Action:      download, | ||||
| 	Name:        "down", | ||||
| 	Flags:       []cli.Flag{SwarmRecursiveFlag, SwarmAccessPasswordFlag}, | ||||
| 	Usage:       "downloads a swarm manifest or a file inside a manifest", | ||||
| 	ArgsUsage:   " <uri> [<dir>]", | ||||
| 	Description: `Downloads a swarm bzz uri to the given dir. When no dir is provided, working directory is assumed. --recursive flag is expected when downloading a manifest with multiple entries.`, | ||||
| } | ||||
|  | ||||
| func download(ctx *cli.Context) { | ||||
| 	log.Debug("downloading content using swarm down") | ||||
| 	args := ctx.Args() | ||||
|   | ||||
| @@ -31,6 +31,68 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| var feedCommand = cli.Command{ | ||||
| 	CustomHelpTemplate: helpTemplate, | ||||
| 	Name:               "feed", | ||||
| 	Usage:              "(Advanced) Create and update Swarm Feeds", | ||||
| 	ArgsUsage:          "<create|update|info>", | ||||
| 	Description:        "Works with Swarm Feeds", | ||||
| 	Subcommands: []cli.Command{ | ||||
| 		{ | ||||
| 			Action:             feedCreateManifest, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "create", | ||||
| 			Usage:              "creates and publishes a new feed manifest", | ||||
| 			Description: `creates and publishes a new feed manifest pointing to a specified user's updates about a particular topic. | ||||
| 					The feed topic can be built in the following ways: | ||||
| 					* use --topic to set the topic to an arbitrary binary hex string. | ||||
| 					* use --name to set the topic to a human-readable name. | ||||
| 					    For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture. | ||||
| 					* use both --topic and --name to create named subtopics.  | ||||
| 						For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning | ||||
| 						this feed tracks a discussion about that contract. | ||||
| 					The --user flag allows to have this manifest refer to a user other than yourself. If not specified, | ||||
| 					it will then default to your local account (--bzzaccount)`, | ||||
| 			Flags: []cli.Flag{SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             feedUpdate, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "update", | ||||
| 			Usage:              "updates the content of an existing Swarm Feed", | ||||
| 			ArgsUsage:          "<0x Hex data>", | ||||
| 			Description: `publishes a new update on the specified topic | ||||
| 					The feed topic can be built in the following ways: | ||||
| 					* use --topic to set the topic to an arbitrary binary hex string. | ||||
| 					* use --name to set the topic to a human-readable name. | ||||
| 					    For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture. | ||||
| 					* use both --topic and --name to create named subtopics.  | ||||
| 						For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning | ||||
| 						this feed tracks a discussion about that contract. | ||||
| 					 | ||||
| 					If you have a manifest, you can specify it with --manifest to refer to the feed, | ||||
| 					instead of using --topic / --name | ||||
| 					`, | ||||
| 			Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             feedInfo, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "info", | ||||
| 			Usage:              "obtains information about an existing Swarm feed", | ||||
| 			Description: `obtains information about an existing Swarm feed | ||||
| 					The topic can be specified directly with the --topic flag as an hex string | ||||
| 					If no topic is specified, the default topic (zero) will be used | ||||
| 					The --name flag can be used to specify subtopics with a specific name. | ||||
| 					The --user flag allows to refer to a user other than yourself. If not specified, | ||||
| 					it will then default to your local account (--bzzaccount) | ||||
| 					If you have a manifest, you can specify it with --manifest instead of --topic / --name / ---user | ||||
| 					to refer to the feed`, | ||||
| 			Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag}, | ||||
| 		}, | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func NewGenericSigner(ctx *cli.Context) feed.Signer { | ||||
| 	return feed.NewGenericSigner(getPrivKey(ctx)) | ||||
| } | ||||
|   | ||||
							
								
								
									
										179
									
								
								cmd/swarm/flags.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								cmd/swarm/flags.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,179 @@ | ||||
| // Copyright 2018 The go-ethereum Authors | ||||
| // This file is part of go-ethereum. | ||||
| // | ||||
| // go-ethereum is free software: you can redistribute it and/or modify | ||||
| // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation, either version 3 of the License, or | ||||
| // (at your option) any later version. | ||||
| // | ||||
| // go-ethereum is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with go-ethereum. If not, see <http://www.gnu.org/licenses/>. | ||||
|  | ||||
| // Command feed allows the user to create and update signed Swarm feeds | ||||
| package main | ||||
|  | ||||
| import cli "gopkg.in/urfave/cli.v1" | ||||
|  | ||||
| var ( | ||||
| 	ChequebookAddrFlag = cli.StringFlag{ | ||||
| 		Name:   "chequebook", | ||||
| 		Usage:  "chequebook contract address", | ||||
| 		EnvVar: SWARM_ENV_CHEQUEBOOK_ADDR, | ||||
| 	} | ||||
| 	SwarmAccountFlag = cli.StringFlag{ | ||||
| 		Name:   "bzzaccount", | ||||
| 		Usage:  "Swarm account key file", | ||||
| 		EnvVar: SWARM_ENV_ACCOUNT, | ||||
| 	} | ||||
| 	SwarmListenAddrFlag = cli.StringFlag{ | ||||
| 		Name:   "httpaddr", | ||||
| 		Usage:  "Swarm HTTP API listening interface", | ||||
| 		EnvVar: SWARM_ENV_LISTEN_ADDR, | ||||
| 	} | ||||
| 	SwarmPortFlag = cli.StringFlag{ | ||||
| 		Name:   "bzzport", | ||||
| 		Usage:  "Swarm local http api port", | ||||
| 		EnvVar: SWARM_ENV_PORT, | ||||
| 	} | ||||
| 	SwarmNetworkIdFlag = cli.IntFlag{ | ||||
| 		Name:   "bzznetworkid", | ||||
| 		Usage:  "Network identifier (integer, default 3=swarm testnet)", | ||||
| 		EnvVar: SWARM_ENV_NETWORK_ID, | ||||
| 	} | ||||
| 	SwarmSwapEnabledFlag = cli.BoolFlag{ | ||||
| 		Name:   "swap", | ||||
| 		Usage:  "Swarm SWAP enabled (default false)", | ||||
| 		EnvVar: SWARM_ENV_SWAP_ENABLE, | ||||
| 	} | ||||
| 	SwarmSwapAPIFlag = cli.StringFlag{ | ||||
| 		Name:   "swap-api", | ||||
| 		Usage:  "URL of the Ethereum API provider to use to settle SWAP payments", | ||||
| 		EnvVar: SWARM_ENV_SWAP_API, | ||||
| 	} | ||||
| 	SwarmSyncDisabledFlag = cli.BoolTFlag{ | ||||
| 		Name:   "nosync", | ||||
| 		Usage:  "Disable swarm syncing", | ||||
| 		EnvVar: SWARM_ENV_SYNC_DISABLE, | ||||
| 	} | ||||
| 	SwarmSyncUpdateDelay = cli.DurationFlag{ | ||||
| 		Name:   "sync-update-delay", | ||||
| 		Usage:  "Duration for sync subscriptions update after no new peers are added (default 15s)", | ||||
| 		EnvVar: SWARM_ENV_SYNC_UPDATE_DELAY, | ||||
| 	} | ||||
| 	SwarmMaxStreamPeerServersFlag = cli.IntFlag{ | ||||
| 		Name:   "max-stream-peer-servers", | ||||
| 		Usage:  "Limit of Stream peer servers, 0 denotes unlimited", | ||||
| 		EnvVar: SWARM_ENV_MAX_STREAM_PEER_SERVERS, | ||||
| 		Value:  10000, // A very large default value is possible as stream servers have very small memory footprint | ||||
| 	} | ||||
| 	SwarmLightNodeEnabled = cli.BoolFlag{ | ||||
| 		Name:   "lightnode", | ||||
| 		Usage:  "Enable Swarm LightNode (default false)", | ||||
| 		EnvVar: SWARM_ENV_LIGHT_NODE_ENABLE, | ||||
| 	} | ||||
| 	SwarmDeliverySkipCheckFlag = cli.BoolFlag{ | ||||
| 		Name:   "delivery-skip-check", | ||||
| 		Usage:  "Skip chunk delivery check (default false)", | ||||
| 		EnvVar: SWARM_ENV_DELIVERY_SKIP_CHECK, | ||||
| 	} | ||||
| 	EnsAPIFlag = cli.StringSliceFlag{ | ||||
| 		Name:   "ens-api", | ||||
| 		Usage:  "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url", | ||||
| 		EnvVar: SWARM_ENV_ENS_API, | ||||
| 	} | ||||
| 	SwarmApiFlag = cli.StringFlag{ | ||||
| 		Name:  "bzzapi", | ||||
| 		Usage: "Swarm HTTP endpoint", | ||||
| 		Value: "http://127.0.0.1:8500", | ||||
| 	} | ||||
| 	SwarmRecursiveFlag = cli.BoolFlag{ | ||||
| 		Name:  "recursive", | ||||
| 		Usage: "Upload directories recursively", | ||||
| 	} | ||||
| 	SwarmWantManifestFlag = cli.BoolTFlag{ | ||||
| 		Name:  "manifest", | ||||
| 		Usage: "Automatic manifest upload (default true)", | ||||
| 	} | ||||
| 	SwarmUploadDefaultPath = cli.StringFlag{ | ||||
| 		Name:  "defaultpath", | ||||
| 		Usage: "path to file served for empty url path (none)", | ||||
| 	} | ||||
| 	SwarmAccessGrantKeyFlag = cli.StringFlag{ | ||||
| 		Name:  "grant-key", | ||||
| 		Usage: "grants a given public key access to an ACT", | ||||
| 	} | ||||
| 	SwarmAccessGrantKeysFlag = cli.StringFlag{ | ||||
| 		Name:  "grant-keys", | ||||
| 		Usage: "grants a given list of public keys in the following file (separated by line breaks) access to an ACT", | ||||
| 	} | ||||
| 	SwarmUpFromStdinFlag = cli.BoolFlag{ | ||||
| 		Name:  "stdin", | ||||
| 		Usage: "reads data to be uploaded from stdin", | ||||
| 	} | ||||
| 	SwarmUploadMimeType = cli.StringFlag{ | ||||
| 		Name:  "mime", | ||||
| 		Usage: "Manually specify MIME type", | ||||
| 	} | ||||
| 	SwarmEncryptedFlag = cli.BoolFlag{ | ||||
| 		Name:  "encrypt", | ||||
| 		Usage: "use encrypted upload", | ||||
| 	} | ||||
| 	SwarmAccessPasswordFlag = cli.StringFlag{ | ||||
| 		Name:   "password", | ||||
| 		Usage:  "Password", | ||||
| 		EnvVar: SWARM_ACCESS_PASSWORD, | ||||
| 	} | ||||
| 	SwarmDryRunFlag = cli.BoolFlag{ | ||||
| 		Name:  "dry-run", | ||||
| 		Usage: "dry-run", | ||||
| 	} | ||||
| 	CorsStringFlag = cli.StringFlag{ | ||||
| 		Name:   "corsdomain", | ||||
| 		Usage:  "Domain on which to send Access-Control-Allow-Origin header (multiple domains can be supplied separated by a ',')", | ||||
| 		EnvVar: SWARM_ENV_CORS, | ||||
| 	} | ||||
| 	SwarmStorePath = cli.StringFlag{ | ||||
| 		Name:   "store.path", | ||||
| 		Usage:  "Path to leveldb chunk DB (default <$GETH_ENV_DIR>/swarm/bzz-<$BZZ_KEY>/chunks)", | ||||
| 		EnvVar: SWARM_ENV_STORE_PATH, | ||||
| 	} | ||||
| 	SwarmStoreCapacity = cli.Uint64Flag{ | ||||
| 		Name:   "store.size", | ||||
| 		Usage:  "Number of chunks (5M is roughly 20-25GB) (default 5000000)", | ||||
| 		EnvVar: SWARM_ENV_STORE_CAPACITY, | ||||
| 	} | ||||
| 	SwarmStoreCacheCapacity = cli.UintFlag{ | ||||
| 		Name:   "store.cache.size", | ||||
| 		Usage:  "Number of recent chunks cached in memory (default 5000)", | ||||
| 		EnvVar: SWARM_ENV_STORE_CACHE_CAPACITY, | ||||
| 	} | ||||
| 	SwarmCompressedFlag = cli.BoolFlag{ | ||||
| 		Name:  "compressed", | ||||
| 		Usage: "Prints encryption keys in compressed form", | ||||
| 	} | ||||
| 	SwarmFeedNameFlag = cli.StringFlag{ | ||||
| 		Name:  "name", | ||||
| 		Usage: "User-defined name for the new feed, limited to 32 characters. If combined with topic, it will refer to a subtopic with this name", | ||||
| 	} | ||||
| 	SwarmFeedTopicFlag = cli.StringFlag{ | ||||
| 		Name:  "topic", | ||||
| 		Usage: "User-defined topic this feed is tracking, hex encoded. Limited to 64 hexadecimal characters", | ||||
| 	} | ||||
| 	SwarmFeedDataOnCreateFlag = cli.StringFlag{ | ||||
| 		Name:  "data", | ||||
| 		Usage: "Initializes the feed with the given hex-encoded data. Data must be prefixed by 0x", | ||||
| 	} | ||||
| 	SwarmFeedManifestFlag = cli.StringFlag{ | ||||
| 		Name:  "manifest", | ||||
| 		Usage: "Refers to the feed through a manifest", | ||||
| 	} | ||||
| 	SwarmFeedUserFlag = cli.StringFlag{ | ||||
| 		Name:  "user", | ||||
| 		Usage: "Indicates the user who updates the feed", | ||||
| 	} | ||||
| ) | ||||
| @@ -30,6 +30,43 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| var fsCommand = cli.Command{ | ||||
| 	Name:               "fs", | ||||
| 	CustomHelpTemplate: helpTemplate, | ||||
| 	Usage:              "perform FUSE operations", | ||||
| 	ArgsUsage:          "fs COMMAND", | ||||
| 	Description:        "Performs FUSE operations by mounting/unmounting/listing mount points. This assumes you already have a Swarm node running locally. For all operation you must reference the correct path to bzzd.ipc in order to communicate with the node", | ||||
| 	Subcommands: []cli.Command{ | ||||
| 		{ | ||||
| 			Action:             mount, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "mount", | ||||
| 			Flags:              []cli.Flag{utils.IPCPathFlag}, | ||||
| 			Usage:              "mount a swarm hash to a mount point", | ||||
| 			ArgsUsage:          "swarm fs mount --ipcpath <path to bzzd.ipc> <manifest hash> <mount point>", | ||||
| 			Description:        "Mounts a Swarm manifest hash to a given mount point. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             unmount, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "unmount", | ||||
| 			Flags:              []cli.Flag{utils.IPCPathFlag}, | ||||
| 			Usage:              "unmount a swarmfs mount", | ||||
| 			ArgsUsage:          "swarm fs unmount --ipcpath <path to bzzd.ipc> <mount point>", | ||||
| 			Description:        "Unmounts a swarmfs mount residing at <mount point>. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             listMounts, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "list", | ||||
| 			Flags:              []cli.Flag{utils.IPCPathFlag}, | ||||
| 			Usage:              "list swarmfs mounts", | ||||
| 			ArgsUsage:          "swarm fs list --ipcpath <path to bzzd.ipc>", | ||||
| 			Description:        "Lists all mounted swarmfs volumes. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", | ||||
| 		}, | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func mount(cliContext *cli.Context) { | ||||
| 	args := cliContext.Args() | ||||
| 	if len(args) < 2 { | ||||
|   | ||||
| @@ -27,6 +27,15 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| var hashCommand = cli.Command{ | ||||
| 	Action:             hash, | ||||
| 	CustomHelpTemplate: helpTemplate, | ||||
| 	Name:               "hash", | ||||
| 	Usage:              "print the swarm hash of a file or directory", | ||||
| 	ArgsUsage:          "<file>", | ||||
| 	Description:        "Prints the swarm hash of file or directory", | ||||
| } | ||||
|  | ||||
| func hash(ctx *cli.Context) { | ||||
| 	args := ctx.Args() | ||||
| 	if len(args) < 1 { | ||||
|   | ||||
| @@ -27,6 +27,15 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| var listCommand = cli.Command{ | ||||
| 	Action:             list, | ||||
| 	CustomHelpTemplate: helpTemplate, | ||||
| 	Name:               "ls", | ||||
| 	Usage:              "list files and directories contained in a manifest", | ||||
| 	ArgsUsage:          "<manifest> [<prefix>]", | ||||
| 	Description:        "Lists files and directories contained in a manifest", | ||||
| } | ||||
|  | ||||
| func list(ctx *cli.Context) { | ||||
| 	args := ctx.Args() | ||||
|  | ||||
|   | ||||
| @@ -70,165 +70,6 @@ var ( | ||||
| 	gitCommit string // Git SHA1 commit hash of the release (set via linker flags) | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	ChequebookAddrFlag = cli.StringFlag{ | ||||
| 		Name:   "chequebook", | ||||
| 		Usage:  "chequebook contract address", | ||||
| 		EnvVar: SWARM_ENV_CHEQUEBOOK_ADDR, | ||||
| 	} | ||||
| 	SwarmAccountFlag = cli.StringFlag{ | ||||
| 		Name:   "bzzaccount", | ||||
| 		Usage:  "Swarm account key file", | ||||
| 		EnvVar: SWARM_ENV_ACCOUNT, | ||||
| 	} | ||||
| 	SwarmListenAddrFlag = cli.StringFlag{ | ||||
| 		Name:   "httpaddr", | ||||
| 		Usage:  "Swarm HTTP API listening interface", | ||||
| 		EnvVar: SWARM_ENV_LISTEN_ADDR, | ||||
| 	} | ||||
| 	SwarmPortFlag = cli.StringFlag{ | ||||
| 		Name:   "bzzport", | ||||
| 		Usage:  "Swarm local http api port", | ||||
| 		EnvVar: SWARM_ENV_PORT, | ||||
| 	} | ||||
| 	SwarmNetworkIdFlag = cli.IntFlag{ | ||||
| 		Name:   "bzznetworkid", | ||||
| 		Usage:  "Network identifier (integer, default 3=swarm testnet)", | ||||
| 		EnvVar: SWARM_ENV_NETWORK_ID, | ||||
| 	} | ||||
| 	SwarmSwapEnabledFlag = cli.BoolFlag{ | ||||
| 		Name:   "swap", | ||||
| 		Usage:  "Swarm SWAP enabled (default false)", | ||||
| 		EnvVar: SWARM_ENV_SWAP_ENABLE, | ||||
| 	} | ||||
| 	SwarmSwapAPIFlag = cli.StringFlag{ | ||||
| 		Name:   "swap-api", | ||||
| 		Usage:  "URL of the Ethereum API provider to use to settle SWAP payments", | ||||
| 		EnvVar: SWARM_ENV_SWAP_API, | ||||
| 	} | ||||
| 	SwarmSyncDisabledFlag = cli.BoolTFlag{ | ||||
| 		Name:   "nosync", | ||||
| 		Usage:  "Disable swarm syncing", | ||||
| 		EnvVar: SWARM_ENV_SYNC_DISABLE, | ||||
| 	} | ||||
| 	SwarmSyncUpdateDelay = cli.DurationFlag{ | ||||
| 		Name:   "sync-update-delay", | ||||
| 		Usage:  "Duration for sync subscriptions update after no new peers are added (default 15s)", | ||||
| 		EnvVar: SWARM_ENV_SYNC_UPDATE_DELAY, | ||||
| 	} | ||||
| 	SwarmMaxStreamPeerServersFlag = cli.IntFlag{ | ||||
| 		Name:   "max-stream-peer-servers", | ||||
| 		Usage:  "Limit of Stream peer servers, 0 denotes unlimited", | ||||
| 		EnvVar: SWARM_ENV_MAX_STREAM_PEER_SERVERS, | ||||
| 		Value:  10000, // A very large default value is possible as stream servers have very small memory footprint | ||||
| 	} | ||||
| 	SwarmLightNodeEnabled = cli.BoolFlag{ | ||||
| 		Name:   "lightnode", | ||||
| 		Usage:  "Enable Swarm LightNode (default false)", | ||||
| 		EnvVar: SWARM_ENV_LIGHT_NODE_ENABLE, | ||||
| 	} | ||||
| 	SwarmDeliverySkipCheckFlag = cli.BoolFlag{ | ||||
| 		Name:   "delivery-skip-check", | ||||
| 		Usage:  "Skip chunk delivery check (default false)", | ||||
| 		EnvVar: SWARM_ENV_DELIVERY_SKIP_CHECK, | ||||
| 	} | ||||
| 	EnsAPIFlag = cli.StringSliceFlag{ | ||||
| 		Name:   "ens-api", | ||||
| 		Usage:  "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url", | ||||
| 		EnvVar: SWARM_ENV_ENS_API, | ||||
| 	} | ||||
| 	SwarmApiFlag = cli.StringFlag{ | ||||
| 		Name:  "bzzapi", | ||||
| 		Usage: "Swarm HTTP endpoint", | ||||
| 		Value: "http://127.0.0.1:8500", | ||||
| 	} | ||||
| 	SwarmRecursiveFlag = cli.BoolFlag{ | ||||
| 		Name:  "recursive", | ||||
| 		Usage: "Upload directories recursively", | ||||
| 	} | ||||
| 	SwarmWantManifestFlag = cli.BoolTFlag{ | ||||
| 		Name:  "manifest", | ||||
| 		Usage: "Automatic manifest upload (default true)", | ||||
| 	} | ||||
| 	SwarmUploadDefaultPath = cli.StringFlag{ | ||||
| 		Name:  "defaultpath", | ||||
| 		Usage: "path to file served for empty url path (none)", | ||||
| 	} | ||||
| 	SwarmAccessGrantKeyFlag = cli.StringFlag{ | ||||
| 		Name:  "grant-key", | ||||
| 		Usage: "grants a given public key access to an ACT", | ||||
| 	} | ||||
| 	SwarmAccessGrantKeysFlag = cli.StringFlag{ | ||||
| 		Name:  "grant-keys", | ||||
| 		Usage: "grants a given list of public keys in the following file (separated by line breaks) access to an ACT", | ||||
| 	} | ||||
| 	SwarmUpFromStdinFlag = cli.BoolFlag{ | ||||
| 		Name:  "stdin", | ||||
| 		Usage: "reads data to be uploaded from stdin", | ||||
| 	} | ||||
| 	SwarmUploadMimeType = cli.StringFlag{ | ||||
| 		Name:  "mime", | ||||
| 		Usage: "Manually specify MIME type", | ||||
| 	} | ||||
| 	SwarmEncryptedFlag = cli.BoolFlag{ | ||||
| 		Name:  "encrypt", | ||||
| 		Usage: "use encrypted upload", | ||||
| 	} | ||||
| 	SwarmAccessPasswordFlag = cli.StringFlag{ | ||||
| 		Name:   "password", | ||||
| 		Usage:  "Password", | ||||
| 		EnvVar: SWARM_ACCESS_PASSWORD, | ||||
| 	} | ||||
| 	SwarmDryRunFlag = cli.BoolFlag{ | ||||
| 		Name:  "dry-run", | ||||
| 		Usage: "dry-run", | ||||
| 	} | ||||
| 	CorsStringFlag = cli.StringFlag{ | ||||
| 		Name:   "corsdomain", | ||||
| 		Usage:  "Domain on which to send Access-Control-Allow-Origin header (multiple domains can be supplied separated by a ',')", | ||||
| 		EnvVar: SWARM_ENV_CORS, | ||||
| 	} | ||||
| 	SwarmStorePath = cli.StringFlag{ | ||||
| 		Name:   "store.path", | ||||
| 		Usage:  "Path to leveldb chunk DB (default <$GETH_ENV_DIR>/swarm/bzz-<$BZZ_KEY>/chunks)", | ||||
| 		EnvVar: SWARM_ENV_STORE_PATH, | ||||
| 	} | ||||
| 	SwarmStoreCapacity = cli.Uint64Flag{ | ||||
| 		Name:   "store.size", | ||||
| 		Usage:  "Number of chunks (5M is roughly 20-25GB) (default 5000000)", | ||||
| 		EnvVar: SWARM_ENV_STORE_CAPACITY, | ||||
| 	} | ||||
| 	SwarmStoreCacheCapacity = cli.UintFlag{ | ||||
| 		Name:   "store.cache.size", | ||||
| 		Usage:  "Number of recent chunks cached in memory (default 5000)", | ||||
| 		EnvVar: SWARM_ENV_STORE_CACHE_CAPACITY, | ||||
| 	} | ||||
| 	SwarmCompressedFlag = cli.BoolFlag{ | ||||
| 		Name:  "compressed", | ||||
| 		Usage: "Prints encryption keys in compressed form", | ||||
| 	} | ||||
| 	SwarmFeedNameFlag = cli.StringFlag{ | ||||
| 		Name:  "name", | ||||
| 		Usage: "User-defined name for the new feed, limited to 32 characters. If combined with topic, it will refer to a subtopic with this name", | ||||
| 	} | ||||
| 	SwarmFeedTopicFlag = cli.StringFlag{ | ||||
| 		Name:  "topic", | ||||
| 		Usage: "User-defined topic this feed is tracking, hex encoded. Limited to 64 hexadecimal characters", | ||||
| 	} | ||||
| 	SwarmFeedDataOnCreateFlag = cli.StringFlag{ | ||||
| 		Name:  "data", | ||||
| 		Usage: "Initializes the feed with the given hex-encoded data. Data must be prefixed by 0x", | ||||
| 	} | ||||
| 	SwarmFeedManifestFlag = cli.StringFlag{ | ||||
| 		Name:  "manifest", | ||||
| 		Usage: "Refers to the feed through a manifest", | ||||
| 	} | ||||
| 	SwarmFeedUserFlag = cli.StringFlag{ | ||||
| 		Name:  "user", | ||||
| 		Usage: "Indicates the user who updates the feed", | ||||
| 	} | ||||
| ) | ||||
|  | ||||
| //declare a few constant error messages, useful for later error check comparisons in test | ||||
| var ( | ||||
| 	SWARM_ERR_NO_BZZACCOUNT   = "bzzaccount option is required but not set; check your config file, command line or environment variables" | ||||
| @@ -279,267 +120,24 @@ func init() { | ||||
| 			Usage:              "Print public key information", | ||||
| 			Description:        "The output of this command is supposed to be machine-readable", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             upload, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "up", | ||||
| 			Usage:              "uploads a file or directory to swarm using the HTTP API", | ||||
| 			ArgsUsage:          "<file>", | ||||
| 			Flags:              []cli.Flag{SwarmEncryptedFlag}, | ||||
| 			Description:        "uploads a file or directory to swarm using the HTTP API and prints the root hash", | ||||
| 		}, | ||||
| 		{ | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "access", | ||||
| 			Usage:              "encrypts a reference and embeds it into a root manifest", | ||||
| 			ArgsUsage:          "<ref>", | ||||
| 			Description:        "encrypts a reference and embeds it into a root manifest", | ||||
| 			Subcommands: []cli.Command{ | ||||
| 				{ | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "new", | ||||
| 					Usage:              "encrypts a reference and embeds it into a root manifest", | ||||
| 					ArgsUsage:          "<ref>", | ||||
| 					Description:        "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", | ||||
| 					Subcommands: []cli.Command{ | ||||
| 						{ | ||||
| 							Action:             accessNewPass, | ||||
| 							CustomHelpTemplate: helpTemplate, | ||||
| 							Flags: []cli.Flag{ | ||||
| 								utils.PasswordFileFlag, | ||||
| 								SwarmDryRunFlag, | ||||
| 							}, | ||||
| 							Name:        "pass", | ||||
| 							Usage:       "encrypts a reference with a password and embeds it into a root manifest", | ||||
| 							ArgsUsage:   "<ref>", | ||||
| 							Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", | ||||
| 						}, | ||||
| 						{ | ||||
| 							Action:             accessNewPK, | ||||
| 							CustomHelpTemplate: helpTemplate, | ||||
| 							Flags: []cli.Flag{ | ||||
| 								utils.PasswordFileFlag, | ||||
| 								SwarmDryRunFlag, | ||||
| 								SwarmAccessGrantKeyFlag, | ||||
| 							}, | ||||
| 							Name:        "pk", | ||||
| 							Usage:       "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest", | ||||
| 							ArgsUsage:   "<ref>", | ||||
| 							Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", | ||||
| 						}, | ||||
| 						{ | ||||
| 							Action:             accessNewACT, | ||||
| 							CustomHelpTemplate: helpTemplate, | ||||
| 							Flags: []cli.Flag{ | ||||
| 								SwarmAccessGrantKeysFlag, | ||||
| 								SwarmDryRunFlag, | ||||
| 								utils.PasswordFileFlag, | ||||
| 							}, | ||||
| 							Name:        "act", | ||||
| 							Usage:       "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest", | ||||
| 							ArgsUsage:   "<ref>", | ||||
| 							Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", | ||||
| 						}, | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "feed", | ||||
| 			Usage:              "(Advanced) Create and update Swarm Feeds", | ||||
| 			ArgsUsage:          "<create|update|info>", | ||||
| 			Description:        "Works with Swarm Feeds", | ||||
| 			Subcommands: []cli.Command{ | ||||
| 				{ | ||||
| 					Action:             feedCreateManifest, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "create", | ||||
| 					Usage:              "creates and publishes a new feed manifest", | ||||
| 					Description: `creates and publishes a new feed manifest pointing to a specified user's updates about a particular topic. | ||||
| 					The feed topic can be built in the following ways: | ||||
| 					* use --topic to set the topic to an arbitrary binary hex string. | ||||
| 					* use --name to set the topic to a human-readable name. | ||||
| 					    For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture. | ||||
| 					* use both --topic and --name to create named subtopics.  | ||||
| 						For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning | ||||
| 						this feed tracks a discussion about that contract. | ||||
| 					The --user flag allows to have this manifest refer to a user other than yourself. If not specified, | ||||
| 					it will then default to your local account (--bzzaccount)`, | ||||
| 					Flags: []cli.Flag{SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag}, | ||||
| 				}, | ||||
| 				{ | ||||
| 					Action:             feedUpdate, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "update", | ||||
| 					Usage:              "updates the content of an existing Swarm Feed", | ||||
| 					ArgsUsage:          "<0x Hex data>", | ||||
| 					Description: `publishes a new update on the specified topic | ||||
| 					The feed topic can be built in the following ways: | ||||
| 					* use --topic to set the topic to an arbitrary binary hex string. | ||||
| 					* use --name to set the topic to a human-readable name. | ||||
| 					    For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture. | ||||
| 					* use both --topic and --name to create named subtopics.  | ||||
| 						For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning | ||||
| 						this feed tracks a discussion about that contract. | ||||
| 					 | ||||
| 					If you have a manifest, you can specify it with --manifest to refer to the feed, | ||||
| 					instead of using --topic / --name | ||||
| 					`, | ||||
| 					Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag}, | ||||
| 				}, | ||||
| 				{ | ||||
| 					Action:             feedInfo, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "info", | ||||
| 					Usage:              "obtains information about an existing Swarm feed", | ||||
| 					Description: `obtains information about an existing Swarm feed | ||||
| 					The topic can be specified directly with the --topic flag as an hex string | ||||
| 					If no topic is specified, the default topic (zero) will be used | ||||
| 					The --name flag can be used to specify subtopics with a specific name. | ||||
| 					The --user flag allows to refer to a user other than yourself. If not specified, | ||||
| 					it will then default to your local account (--bzzaccount) | ||||
| 					If you have a manifest, you can specify it with --manifest instead of --topic / --name / ---user | ||||
| 					to refer to the feed`, | ||||
| 					Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             list, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "ls", | ||||
| 			Usage:              "list files and directories contained in a manifest", | ||||
| 			ArgsUsage:          "<manifest> [<prefix>]", | ||||
| 			Description:        "Lists files and directories contained in a manifest", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             hash, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "hash", | ||||
| 			Usage:              "print the swarm hash of a file or directory", | ||||
| 			ArgsUsage:          "<file>", | ||||
| 			Description:        "Prints the swarm hash of file or directory", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:      download, | ||||
| 			Name:        "down", | ||||
| 			Flags:       []cli.Flag{SwarmRecursiveFlag, SwarmAccessPasswordFlag}, | ||||
| 			Usage:       "downloads a swarm manifest or a file inside a manifest", | ||||
| 			ArgsUsage:   " <uri> [<dir>]", | ||||
| 			Description: `Downloads a swarm bzz uri to the given dir. When no dir is provided, working directory is assumed. --recursive flag is expected when downloading a manifest with multiple entries.`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:               "manifest", | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Usage:              "perform operations on swarm manifests", | ||||
| 			ArgsUsage:          "COMMAND", | ||||
| 			Description:        "Updates a MANIFEST by adding/removing/updating the hash of a path.\nCOMMAND could be: add, update, remove", | ||||
| 			Subcommands: []cli.Command{ | ||||
| 				{ | ||||
| 					Action:             manifestAdd, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "add", | ||||
| 					Usage:              "add a new path to the manifest", | ||||
| 					ArgsUsage:          "<MANIFEST> <path> <hash>", | ||||
| 					Description:        "Adds a new path to the manifest", | ||||
| 				}, | ||||
| 				{ | ||||
| 					Action:             manifestUpdate, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "update", | ||||
| 					Usage:              "update the hash for an already existing path in the manifest", | ||||
| 					ArgsUsage:          "<MANIFEST> <path> <newhash>", | ||||
| 					Description:        "Update the hash for an already existing path in the manifest", | ||||
| 				}, | ||||
| 				{ | ||||
| 					Action:             manifestRemove, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "remove", | ||||
| 					Usage:              "removes a path from the manifest", | ||||
| 					ArgsUsage:          "<MANIFEST> <path>", | ||||
| 					Description:        "Removes a path from the manifest", | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:               "fs", | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Usage:              "perform FUSE operations", | ||||
| 			ArgsUsage:          "fs COMMAND", | ||||
| 			Description:        "Performs FUSE operations by mounting/unmounting/listing mount points. This assumes you already have a Swarm node running locally. For all operation you must reference the correct path to bzzd.ipc in order to communicate with the node", | ||||
| 			Subcommands: []cli.Command{ | ||||
| 				{ | ||||
| 					Action:             mount, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "mount", | ||||
| 					Flags:              []cli.Flag{utils.IPCPathFlag}, | ||||
| 					Usage:              "mount a swarm hash to a mount point", | ||||
| 					ArgsUsage:          "swarm fs mount --ipcpath <path to bzzd.ipc> <manifest hash> <mount point>", | ||||
| 					Description:        "Mounts a Swarm manifest hash to a given mount point. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", | ||||
| 				}, | ||||
| 				{ | ||||
| 					Action:             unmount, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "unmount", | ||||
| 					Flags:              []cli.Flag{utils.IPCPathFlag}, | ||||
| 					Usage:              "unmount a swarmfs mount", | ||||
| 					ArgsUsage:          "swarm fs unmount --ipcpath <path to bzzd.ipc> <mount point>", | ||||
| 					Description:        "Unmounts a swarmfs mount residing at <mount point>. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", | ||||
| 				}, | ||||
| 				{ | ||||
| 					Action:             listMounts, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "list", | ||||
| 					Flags:              []cli.Flag{utils.IPCPathFlag}, | ||||
| 					Usage:              "list swarmfs mounts", | ||||
| 					ArgsUsage:          "swarm fs list --ipcpath <path to bzzd.ipc>", | ||||
| 					Description:        "Lists all mounted swarmfs volumes. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:               "db", | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Usage:              "manage the local chunk database", | ||||
| 			ArgsUsage:          "db COMMAND", | ||||
| 			Description:        "Manage the local chunk database", | ||||
| 			Subcommands: []cli.Command{ | ||||
| 				{ | ||||
| 					Action:             dbExport, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "export", | ||||
| 					Usage:              "export a local chunk database as a tar archive (use - to send to stdout)", | ||||
| 					ArgsUsage:          "<chunkdb> <file>", | ||||
| 					Description: ` | ||||
| Export a local chunk database as a tar archive (use - to send to stdout). | ||||
|  | ||||
|     swarm db export ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar | ||||
|  | ||||
| The export may be quite large, consider piping the output through the Unix | ||||
| pv(1) tool to get a progress bar: | ||||
|  | ||||
|     swarm db export ~/.ethereum/swarm/bzz-KEY/chunks - | pv > chunks.tar | ||||
| `, | ||||
| 				}, | ||||
| 				{ | ||||
| 					Action:             dbImport, | ||||
| 					CustomHelpTemplate: helpTemplate, | ||||
| 					Name:               "import", | ||||
| 					Usage:              "import chunks from a tar archive into a local chunk database (use - to read from stdin)", | ||||
| 					ArgsUsage:          "<chunkdb> <file>", | ||||
| 					Description: `Import chunks from a tar archive into a local chunk database (use - to read from stdin). | ||||
|  | ||||
|     swarm db import ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar | ||||
|  | ||||
| The import may be quite large, consider piping the input through the Unix | ||||
| pv(1) tool to get a progress bar: | ||||
|  | ||||
|     pv chunks.tar | swarm db import ~/.ethereum/swarm/bzz-KEY/chunks -`, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
|  | ||||
| 		// See upload.go | ||||
| 		upCommand, | ||||
| 		// See access.go | ||||
| 		accessCommand, | ||||
| 		// See feeds.go | ||||
| 		feedCommand, | ||||
| 		// See list.go | ||||
| 		listCommand, | ||||
| 		// See hash.go | ||||
| 		hashCommand, | ||||
| 		// See download.go | ||||
| 		downloadCommand, | ||||
| 		// See manifest.go | ||||
| 		manifestCommand, | ||||
| 		// See fs.go | ||||
| 		fsCommand, | ||||
| 		// See db.go | ||||
| 		dbCommand, | ||||
| 		// See config.go | ||||
| 		DumpConfigCommand, | ||||
| 	} | ||||
|   | ||||
| @@ -28,6 +28,40 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| var manifestCommand = cli.Command{ | ||||
| 	Name:               "manifest", | ||||
| 	CustomHelpTemplate: helpTemplate, | ||||
| 	Usage:              "perform operations on swarm manifests", | ||||
| 	ArgsUsage:          "COMMAND", | ||||
| 	Description:        "Updates a MANIFEST by adding/removing/updating the hash of a path.\nCOMMAND could be: add, update, remove", | ||||
| 	Subcommands: []cli.Command{ | ||||
| 		{ | ||||
| 			Action:             manifestAdd, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "add", | ||||
| 			Usage:              "add a new path to the manifest", | ||||
| 			ArgsUsage:          "<MANIFEST> <path> <hash>", | ||||
| 			Description:        "Adds a new path to the manifest", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             manifestUpdate, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "update", | ||||
| 			Usage:              "update the hash for an already existing path in the manifest", | ||||
| 			ArgsUsage:          "<MANIFEST> <path> <newhash>", | ||||
| 			Description:        "Update the hash for an already existing path in the manifest", | ||||
| 		}, | ||||
| 		{ | ||||
| 			Action:             manifestRemove, | ||||
| 			CustomHelpTemplate: helpTemplate, | ||||
| 			Name:               "remove", | ||||
| 			Usage:              "removes a path from the manifest", | ||||
| 			ArgsUsage:          "<MANIFEST> <path>", | ||||
| 			Description:        "Removes a path from the manifest", | ||||
| 		}, | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| // manifestAdd adds a new entry to the manifest at the given path. | ||||
| // New entry hash, the last argument, must be the hash of a manifest | ||||
| // with only one entry, which meta-data will be added to the original manifest. | ||||
|   | ||||
| @@ -34,8 +34,17 @@ import ( | ||||
| 	"gopkg.in/urfave/cli.v1" | ||||
| ) | ||||
|  | ||||
| func upload(ctx *cli.Context) { | ||||
| var upCommand = cli.Command{ | ||||
| 	Action:             upload, | ||||
| 	CustomHelpTemplate: helpTemplate, | ||||
| 	Name:               "up", | ||||
| 	Usage:              "uploads a file or directory to swarm using the HTTP API", | ||||
| 	ArgsUsage:          "<file>", | ||||
| 	Flags:              []cli.Flag{SwarmEncryptedFlag}, | ||||
| 	Description:        "uploads a file or directory to swarm using the HTTP API and prints the root hash", | ||||
| } | ||||
|  | ||||
| func upload(ctx *cli.Context) { | ||||
| 	args := ctx.Args() | ||||
| 	var ( | ||||
| 		bzzapi       = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user