提交 3003f938 作者: Kevin Atkinson

Fix "files stat" to work on raw nodes.

License: MIT
Signed-off-by: 's avatarKevin Atkinson <k@kevina.org>
上级 0182e597
...@@ -168,38 +168,46 @@ func statNode(ds dag.DAGService, fsn mfs.FSNode) (*Object, error) { ...@@ -168,38 +168,46 @@ func statNode(ds dag.DAGService, fsn mfs.FSNode) (*Object, error) {
c := nd.Cid() 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() cumulsize, err := nd.Size()
if err != nil { if err != nil {
return nil, err return nil, err
} }
var ndtype string switch n := nd.(type) {
switch fsn.Type() { case *dag.ProtoNode:
case mfs.TDir: d, err := ft.FromBytes(n.Data())
ndtype = "directory" if err != nil {
case mfs.TFile: return nil, err
ndtype = "file" }
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: default:
return nil, fmt.Errorf("Unrecognized node type: %s", fsn.Type()) return nil, fmt.Errorf("not unixfs node (proto or raw)")
} }
return &Object{
Hash: c.String(),
Blocks: len(nd.Links()),
Size: d.GetFilesize(),
CumulativeSize: cumulsize,
Type: ndtype,
}, nil
} }
var FilesCpCmd = &cmds.Command{ var FilesCpCmd = &cmds.Command{
......
...@@ -177,6 +177,19 @@ test_files_api() { ...@@ -177,6 +177,19 @@ test_files_api() {
test_cmp ls_l_expected ls_l_actual 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" ' test_expect_success "can read file $EXTRA" '
ipfs files read /cats/file1 > file1out ipfs files read /cats/file1 > file1out
' '
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论