diff --git a/core/commands/ls.go b/core/commands/ls.go index 070eb7595..b0fa70e51 100644 --- a/core/commands/ls.go +++ b/core/commands/ls.go @@ -235,6 +235,7 @@ func makeLsLink(req *cmds.Request, dserv ipld.DAGService, resolveType bool, reso case cid.Raw: // No need to check with raw leaves t = unixfs.TFile + size = link.Size case cid.DagProtobuf: linkNode, err := link.GetNode(req.Context, dserv) if err == ipld.ErrNotFound && !resolveType && !resolveSize { @@ -268,6 +269,7 @@ func makeLsLink(req *cmds.Request, dserv ipld.DAGService, resolveType bool, reso func tabularOutput(req *cmds.Request, w io.Writer, out *LsOutput, lastObjectHash string, ignoreBreaks bool) string { headers, _ := req.Options[lsHeadersOptionNameTime].(bool) stream, _ := req.Options[lsStreamOptionName].(bool) + size, _ := req.Options[lsSizeOptionName].(bool) // in streaming mode we can't automatically align the tabs // so we take a best guess var minTabWidth int @@ -291,17 +293,28 @@ func tabularOutput(req *cmds.Request, w io.Writer, out *LsOutput, lastObjectHash fmt.Fprintf(tw, "%s:\n", object.Hash) } if headers { - fmt.Fprintln(tw, "Hash\tSize\tName") + s := "Hash\tName" + if size { + s = "Hash\tSize\tName" + } + fmt.Fprintln(tw, s) } lastObjectHash = object.Hash } for _, link := range object.Links { - if link.Type == unixfs.TDirectory { - link.Name += "/" + s := "%[1]s\t%[3]s\n" + + switch { + case link.Type == unixfs.TDirectory && size: + s = "%[1]s\t\t%[3]s/\n" + case link.Type == unixfs.TDirectory && !size: + s = "%[1]s\t%[3]s/\n" + case size: + s = "%s\t%v\t%s\n" } - fmt.Fprintf(tw, "%s\t%v\t%s\n", link.Hash, link.Size, link.Name) + fmt.Fprintf(tw, s, link.Hash, link.Size, link.Name) } } tw.Flush() diff --git a/core/coreapi/interface/tests/unixfs.go b/core/coreapi/interface/tests/unixfs.go index 9e1454c41..e8a1aba32 100644 --- a/core/coreapi/interface/tests/unixfs.go +++ b/core/coreapi/interface/tests/unixfs.go @@ -704,8 +704,8 @@ func (tp *provider) TestLs(t *testing.T) { if len(links) != 1 { t.Fatalf("expected 1 link, got %d", len(links)) } - if links[0].Size != 15 { - t.Fatalf("expected size = 15, got %d", links[0].Size) + if links[0].Size != 23 { + t.Fatalf("expected size = 23, got %d", links[0].Size) } if links[0].Name != "name-of-file" { t.Fatalf("expected name = name-of-file, got %s", links[0].Name) diff --git a/test/sharness/t0045-ls.sh b/test/sharness/t0045-ls.sh index 0cfcde097..fd642e34c 100755 --- a/test/sharness/t0045-ls.sh +++ b/test/sharness/t0045-ls.sh @@ -62,7 +62,7 @@ EOF ' test_expect_success "'ipfs ls --size=false ' succeeds" ' - ipfs ls --resolve-size QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls + ipfs ls --size=false QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls ' test_expect_success "'ipfs ls ' output looks good" ' @@ -147,24 +147,24 @@ EOF test_expect_success "'ipfs ls --stream ' output looks good" ' cat <<-\EOF >expected_ls_stream && QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj: -QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss d1/ -QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy d2/ -QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 5 f1 -QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 5 f2 +QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss d1/ +QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy d2/ +QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 5 f1 +QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 5 f2 QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy: -QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1024 1024 -QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 6 a +QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1024 1024 +QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 6 a QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss: -QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 128 128 -QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 6 a +QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 128 128 +QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 6 a EOF test_cmp expected_ls_stream actual_ls_stream ' test_expect_success "'ipfs ls --size=false --stream ' succeeds" ' - ipfs ls --resolve-size --stream QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls_stream + ipfs ls --size=false --stream QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls_stream ' test_expect_success "'ipfs ls --size=false --stream ' output looks good" ' @@ -193,21 +193,21 @@ EOF test_expect_success "'ipfs ls --stream --headers ' output looks good" ' cat <<-\EOF >expected_ls_stream_headers && QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj: -Hash Size Name -QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss d1/ -QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy d2/ -QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 13 f1 -QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 13 f2 +Hash Size Name +QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss d1/ +QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy d2/ +QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 5 f1 +QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 5 f2 QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy: -Hash Size Name -QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1035 1024 -QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 14 a +Hash Size Name +QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1024 1024 +QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 6 a QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss: -Hash Size Name -QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 139 128 -QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 14 a +Hash Size Name +QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 128 128 +QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 6 a EOF test_cmp expected_ls_stream_headers actual_ls_stream_headers ' @@ -225,21 +225,21 @@ test_ls_cmd_raw_leaves() { } test_ls_object() { - test_expect_success "ipfs add medium size file then 'ipfs ls' works as expected" ' + test_expect_success "ipfs add medium size file then 'ipfs ls --size=false' works as expected" ' random 500000 2 > somefile && HASH=$(ipfs add somefile -q) && - echo "QmPrM8S5T7Q3M8DQvQMS7m41m3Aq4jBjzAzvky5fH3xfr4 262158 " > ls-expect && - echo "QmdaAntAzQqqVMo4B8V69nkQd5d918YjHXUe2oF6hr72ri 237870 " >> ls-expect && - ipfs ls $HASH > ls-actual && + echo "QmPrM8S5T7Q3M8DQvQMS7m41m3Aq4jBjzAzvky5fH3xfr4 " > ls-expect && + echo "QmdaAntAzQqqVMo4B8V69nkQd5d918YjHXUe2oF6hr72ri " >> ls-expect && + ipfs ls --size=false $HASH > ls-actual && test_cmp ls-actual ls-expect ' - test_expect_success "ipfs add medium size file then 'ipfs ls --resolve-size' works as expected" ' + test_expect_success "ipfs add medium size file then 'ipfs ls' works as expected" ' random 500000 2 > somefile && HASH=$(ipfs add somefile -q) && echo "QmPrM8S5T7Q3M8DQvQMS7m41m3Aq4jBjzAzvky5fH3xfr4 262144 " > ls-expect && echo "QmdaAntAzQqqVMo4B8V69nkQd5d918YjHXUe2oF6hr72ri 237856 " >> ls-expect && - ipfs ls --resolve-size $HASH > ls-actual && + ipfs ls $HASH > ls-actual && test_cmp ls-actual ls-expect ' } @@ -248,7 +248,7 @@ test_ls_object() { test_ls_cmd test_ls_cmd_streaming test_ls_cmd_raw_leaves -test_ls_cmd_raw_leaves --resolve-size +test_ls_cmd_raw_leaves --size test_ls_object # should work online @@ -256,7 +256,7 @@ test_launch_ipfs_daemon test_ls_cmd test_ls_cmd_streaming test_ls_cmd_raw_leaves -test_ls_cmd_raw_leaves --resolve-size +test_ls_cmd_raw_leaves --size test_kill_ipfs_daemon test_ls_object @@ -317,8 +317,8 @@ test_launch_ipfs_daemon # it does it should eventually fail as the content is random and # should not exist on the network, but we don't want to wait for a # timeout so we will kill the request after a few seconds -test_expect_success "'ipfs ls --resolve-type=false' ok and does not hang" ' - go-timeout 2 ipfs ls --resolve-type=false $DIR +test_expect_success "'ipfs ls --resolve-type=false --size=false' ok and does not hang" ' + go-timeout 2 ipfs ls --resolve-type=false --size=false $DIR ' test_kill_ipfs_daemon diff --git a/test/sharness/t0051-object.sh b/test/sharness/t0051-object.sh index 70058be4a..6f70d2903 100755 --- a/test/sharness/t0051-object.sh +++ b/test/sharness/t0051-object.sh @@ -292,7 +292,7 @@ test_object_cmd() { ' test_expect_success "output looks good" ' - echo "QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn 4 foo/" > patched_exp && + echo "QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn foo/" > patched_exp && test_cmp patched_exp patched_output ' diff --git a/test/sharness/t0260-sharding.sh b/test/sharness/t0260-sharding.sh index 6fb3cf657..02d528fa9 100755 --- a/test/sharness/t0260-sharding.sh +++ b/test/sharness/t0260-sharding.sh @@ -65,15 +65,16 @@ test_expect_success "ipfs cat error output the same" ' test_cmp sharded_err unsharded_err ' -test_expect_success "'ipfs ls --resolve-type=false' admits missing block" ' +test_expect_success "'ipfs ls --resolve-type=false --size=false' admits missing block" ' ipfs ls "$SHARDED" | head -1 > first_file && + ipfs ls --size=false "$SHARDED" | sort > sharded_out_nosize && read -r HASH _ NAME missing_out && - test_cmp sharded_out missing_out + ipfs ls --resolve-type=false --size=false "$SHARDED" | sort > missing_out && + test_cmp sharded_out_nosize missing_out ' test_launch_ipfs_daemon