From 07008042f1e6aaeb0b047d8cd3536646dd0f337e Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 20 Mar 2015 15:46:03 +0100 Subject: [PATCH] ipfs ls: added --headers option - added tests for 'ipfs ls --headers' - comments from CR (opts) - sharness: fix ls test whitespace --- core/commands/ls.go | 23 ++++++++++++++++++----- test/sharness/t0045-ls.sh | 26 +++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/core/commands/ls.go b/core/commands/ls.go index 4da0a9803..dcf77695f 100644 --- a/core/commands/ls.go +++ b/core/commands/ls.go @@ -42,6 +42,9 @@ it contains, with the following format: Arguments: []cmds.Argument{ cmds.StringArg("ipfs-path", true, true, "The path to the IPFS object(s) to list links from").EnableStdin(), }, + Options: []cmds.Option{ + cmds.BoolOption("headers", "", "Print table headers (Hash, Name, Size)"), + }, Run: func(req cmds.Request, res cmds.Response) { node, err := req.Context().GetNode() if err != nil { @@ -49,6 +52,12 @@ it contains, with the following format: return } + // get options early -> exit early in case of error + if _, _, err := req.Option("headers").Bool(); err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + paths := req.Arguments() dagnodes := make([]*merkledag.Node, 0) @@ -91,21 +100,25 @@ it contains, with the following format: }, Marshalers: cmds.MarshalerMap{ cmds.Text: func(res cmds.Response) (io.Reader, error) { - output := res.Output().(*LsOutput).Objects + + headers, _, _ := res.Request().Option("headers").Bool() + output := res.Output().(*LsOutput) var buf bytes.Buffer w := tabwriter.NewWriter(&buf, 1, 2, 1, ' ', 0) - for _, object := range output { - if len(output) > 1 { + for _, object := range output.Objects { + if len(output.Objects) > 1 { fmt.Fprintf(w, "%s:\n", object.Hash) } - fmt.Fprintln(w, "Hash\tSize\tName\t") + if headers { + fmt.Fprintln(w, "Hash\tSize\tName\t") + } for _, link := range object.Links { if link.Type == unixfspb.Data_Directory { link.Name += "/" } fmt.Fprintf(w, "%s\t%v\t%s\t\n", link.Hash, link.Size, link.Name) } - if len(output) > 1 { + if len(output.Objects) > 1 { fmt.Fprintln(w) } } diff --git a/test/sharness/t0045-ls.sh b/test/sharness/t0045-ls.sh index 0bda17466..c9a7e30b5 100755 --- a/test/sharness/t0045-ls.sh +++ b/test/sharness/t0045-ls.sh @@ -42,6 +42,30 @@ test_expect_success "'ipfs ls ' succeeds" ' test_expect_success "'ipfs ls ' output looks good" ' cat <<-\EOF >expected_ls && + QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj: + QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss 246 d1/ + QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy 1143 d2/ + QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 13 f1 + QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 13 f2 + + QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy: + QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1035 1024 + QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 14 a + + QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss: + QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 139 128 + QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 14 a + + EOF + test_cmp expected_ls actual_ls +' + +test_expect_success "'ipfs ls --headers ' succeeds" ' + ipfs ls --headers QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls_headers +' + +test_expect_success "'ipfs ls --headers ' output looks good" ' + cat <<-\EOF >expected_ls_headers && QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj: Hash Size Name QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss 246 d1/ @@ -60,7 +84,7 @@ test_expect_success "'ipfs ls ' output looks good" ' QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 14 a EOF - test_cmp expected_ls actual_ls + test_cmp expected_ls_headers actual_ls_headers ' test_done