aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/swarm/list.go
diff options
context:
space:
mode:
authorLewis Marshall <lewis@lmars.net>2017-04-05 06:20:07 +0800
committerFelix Lange <fjl@users.noreply.github.com>2017-04-05 06:20:07 +0800
commitb319f027a0be232a9cb307336b0349b36737c7f1 (patch)
treea17c7dc775c270aea9acdabc8e13292b3c2ae958 /cmd/swarm/list.go
parent09777952ee476ff80d4b6e63b5041ff5ca0e441b (diff)
downloadgo-tangerine-b319f027a0be232a9cb307336b0349b36737c7f1.tar
go-tangerine-b319f027a0be232a9cb307336b0349b36737c7f1.tar.gz
go-tangerine-b319f027a0be232a9cb307336b0349b36737c7f1.tar.bz2
go-tangerine-b319f027a0be232a9cb307336b0349b36737c7f1.tar.lz
go-tangerine-b319f027a0be232a9cb307336b0349b36737c7f1.tar.xz
go-tangerine-b319f027a0be232a9cb307336b0349b36737c7f1.tar.zst
go-tangerine-b319f027a0be232a9cb307336b0349b36737c7f1.zip
cmd/swarm, swarm/api/client: add HTTP API client and 'swarm ls' command (#3742)
This adds a swarm ls command which lists files and directories stored in a manifest. Rather than listing all files, it uses "directory prefixes" in case there are a lot of files in a manifest but you just want to traverse it. This also includes some refactoring to the tests and the introduction of a swarm/api/client package to make things easier to test.
Diffstat (limited to 'cmd/swarm/list.go')
-rw-r--r--cmd/swarm/list.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/cmd/swarm/list.go b/cmd/swarm/list.go
new file mode 100644
index 000000000..3a68fef03
--- /dev/null
+++ b/cmd/swarm/list.go
@@ -0,0 +1,58 @@
+// Copyright 2016 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/>.
+
+package main
+
+import (
+ "fmt"
+ "os"
+ "strings"
+ "text/tabwriter"
+
+ "github.com/ethereum/go-ethereum/cmd/utils"
+ swarm "github.com/ethereum/go-ethereum/swarm/api/client"
+ "gopkg.in/urfave/cli.v1"
+)
+
+func list(ctx *cli.Context) {
+ args := ctx.Args()
+
+ if len(args) < 1 {
+ utils.Fatalf("Please supply a manifest reference as the first argument")
+ } else if len(args) > 2 {
+ utils.Fatalf("Too many arguments - usage 'swarm ls manifest [prefix]'")
+ }
+ manifest := args[0]
+
+ var prefix string
+ if len(args) == 2 {
+ prefix = args[1]
+ }
+
+ bzzapi := strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/")
+ client := swarm.NewClient(bzzapi)
+ entries, err := client.ManifestFileList(manifest, prefix)
+ if err != nil {
+ utils.Fatalf("Failed to generate file and directory list: %s", err)
+ }
+
+ w := tabwriter.NewWriter(os.Stdout, 1, 2, 2, ' ', 0)
+ defer w.Flush()
+ fmt.Fprintln(w, "HASH\tCONTENT TYPE\tPATH")
+ for _, entry := range entries {
+ fmt.Fprintf(w, "%s\t%s\t%s\n", entry.Hash, entry.ContentType, entry.Path)
+ }
+}