From 3003f93854681ba4296cffaf542f1786da8c0dca Mon Sep 17 00:00:00 2001 From: Kevin Atkinson Date: Thu, 19 Oct 2017 16:08:10 -0400 Subject: [PATCH] Fix "files stat" to work on raw nodes. License: MIT Signed-off-by: Kevin Atkinson --- core/commands/files/files.go | 60 ++++++++++++++++++-------------- test/sharness/t0250-files-api.sh | 13 +++++++ 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/core/commands/files/files.go b/core/commands/files/files.go index ef7903e7d..bd39b1f2d 100644 --- a/core/commands/files/files.go +++ b/core/commands/files/files.go @@ -168,38 +168,46 @@ func statNode(ds dag.DAGService, fsn mfs.FSNode) (*Object, error) { c := nd.Cid() - pbnd, ok := nd.(*dag.ProtoNode) - if !ok { - return nil, dag.ErrNotProtobuf - } - - d, err := ft.FromBytes(pbnd.Data()) - if err != nil { - return nil, err - } - cumulsize, err := nd.Size() if err != nil { return nil, err } - var ndtype string - switch fsn.Type() { - case mfs.TDir: - ndtype = "directory" - case mfs.TFile: - ndtype = "file" - default: - return nil, fmt.Errorf("Unrecognized node type: %s", fsn.Type()) - } + switch n := nd.(type) { + case *dag.ProtoNode: + d, err := ft.FromBytes(n.Data()) + if err != nil { + return nil, err + } - return &Object{ - Hash: c.String(), - Blocks: len(nd.Links()), - Size: d.GetFilesize(), - CumulativeSize: cumulsize, - Type: ndtype, - }, nil + var ndtype string + switch fsn.Type() { + case mfs.TDir: + ndtype = "directory" + case mfs.TFile: + ndtype = "file" + default: + return nil, fmt.Errorf("unrecognized node type: %s", fsn.Type()) + } + + return &Object{ + Hash: c.String(), + Blocks: len(nd.Links()), + Size: d.GetFilesize(), + CumulativeSize: cumulsize, + Type: ndtype, + }, nil + case *dag.RawNode: + return &Object{ + Hash: c.String(), + Blocks: 0, + Size: cumulsize, + CumulativeSize: cumulsize, + Type: "file", + }, nil + default: + return nil, fmt.Errorf("not unixfs node (proto or raw)") + } } var FilesCpCmd = &cmds.Command{ diff --git a/test/sharness/t0250-files-api.sh b/test/sharness/t0250-files-api.sh index 7f1f08a68..ecdf97925 100755 --- a/test/sharness/t0250-files-api.sh +++ b/test/sharness/t0250-files-api.sh @@ -177,6 +177,19 @@ test_files_api() { test_cmp ls_l_expected ls_l_actual ' + test_expect_success "can stat file $EXTRA" ' + ipfs files stat /cats/file1 > file1stat_orig + ' + + test_expect_success "stat output looks good" ' + grep -v CumulativeSize: file1stat_orig > file1stat_actual && + echo "$FILE1" > file1stat_expect && + echo "Size: 4" >> file1stat_expect && + echo "ChildBlocks: 0" >> file1stat_expect && + echo "Type: file" >> file1stat_expect && + test_cmp file1stat_expect file1stat_actual + ' + test_expect_success "can read file $EXTRA" ' ipfs files read /cats/file1 > file1out '