提交 47001548 作者: Kevin Atkinson

Finish basic support for raw nodes in dag modifier.

License: MIT
Signed-off-by: 's avatarKevin Atkinson <k@kevina.org>
上级 c75ac6a7
...@@ -15,6 +15,7 @@ test_expect_success "can create some files for testing" ' ...@@ -15,6 +15,7 @@ test_expect_success "can create some files for testing" '
FILE1=$(echo foo | ipfs add -q) && FILE1=$(echo foo | ipfs add -q) &&
FILE2=$(echo bar | ipfs add -q) && FILE2=$(echo bar | ipfs add -q) &&
FILE3=$(echo baz | ipfs add -q) && FILE3=$(echo baz | ipfs add -q) &&
FILE9=$(echo zip | ipfs add -q --raw-leaves) &&
mkdir stuff_test && mkdir stuff_test &&
echo cats > stuff_test/a && echo cats > stuff_test/a &&
echo dogs > stuff_test/b && echo dogs > stuff_test/b &&
...@@ -252,6 +253,42 @@ test_files_api() { ...@@ -252,6 +253,42 @@ test_files_api() {
test_cmp roothash roothashafter test_cmp roothash roothashafter
' '
# test raw node
test_expect_success "can put a raw-node into root" '
ipfs files cp /ipfs/$FILE9 /file9
'
test_expect_success "file shows up in root" '
verify_dir_contents / file9 cats
'
test_expect_success "can read file" '
ipfs files read /file9 > file9out
'
test_expect_success "output looks good" '
echo zip > expected &&
test_cmp expected file9out
'
test_expect_success "can remove file from root" '
ipfs files rm /file9
'
test_expect_success "file no longer appears" '
verify_dir_contents / cats
'
test_expect_success "check root hash" '
ipfs files stat --hash / > roothash
'
test_expect_success "check root hash was not changed" '
ipfs files stat --hash / > roothashafter &&
test_cmp roothash roothashafter
'
# test read options # test read options
test_expect_success "read from offset works" ' test_expect_success "read from offset works" '
......
...@@ -152,23 +152,25 @@ func (dm *DagModifier) Write(b []byte) (int, error) { ...@@ -152,23 +152,25 @@ func (dm *DagModifier) Write(b []byte) (int, error) {
var ErrNoRawYet = fmt.Errorf("currently only fully support protonodes in the dagmodifier") var ErrNoRawYet = fmt.Errorf("currently only fully support protonodes in the dagmodifier")
func (dm *DagModifier) Size() (int64, error) { func (dm *DagModifier) Size() (int64, error) {
pbnd, ok := dm.curNode.(*mdag.ProtoNode) switch nd := dm.curNode.(type) {
if !ok { case *mdag.ProtoNode:
return 0, ErrNoRawYet pbn, err := ft.FromBytes(nd.Data())
}
pbn, err := ft.FromBytes(pbnd.Data())
if err != nil { if err != nil {
return 0, err return 0, err
} }
if dm.wrBuf != nil && uint64(dm.wrBuf.Len())+dm.writeStart > pbn.GetFilesize() {
if dm.wrBuf != nil {
if uint64(dm.wrBuf.Len())+dm.writeStart > pbn.GetFilesize() {
return int64(dm.wrBuf.Len()) + int64(dm.writeStart), nil return int64(dm.wrBuf.Len()) + int64(dm.writeStart), nil
} }
}
return int64(pbn.GetFilesize()), nil return int64(pbn.GetFilesize()), nil
case *mdag.RawNode:
if dm.wrBuf != nil {
return 0, ErrNoRawYet
}
sz, err := nd.Size()
return int64(sz), err
default:
return 0, ErrNotUnixfs
}
} }
// Sync writes changes to this dag to disk // Sync writes changes to this dag to disk
...@@ -397,12 +399,12 @@ func (dm *DagModifier) CtxReadFull(ctx context.Context, b []byte) (int, error) { ...@@ -397,12 +399,12 @@ func (dm *DagModifier) CtxReadFull(ctx context.Context, b []byte) (int, error) {
} }
// GetNode gets the modified DAG Node // GetNode gets the modified DAG Node
func (dm *DagModifier) GetNode() (*mdag.ProtoNode, error) { func (dm *DagModifier) GetNode() (node.Node, error) {
err := dm.Sync() err := dm.Sync()
if err != nil { if err != nil {
return nil, err return nil, err
} }
return dm.curNode.Copy().(*mdag.ProtoNode), nil return dm.curNode.Copy(), nil
} }
// HasChanges returned whether or not there are unflushed changes to this dag // HasChanges returned whether or not there are unflushed changes to this dag
......
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
h "github.com/ipfs/go-ipfs/importer/helpers" h "github.com/ipfs/go-ipfs/importer/helpers"
trickle "github.com/ipfs/go-ipfs/importer/trickle" trickle "github.com/ipfs/go-ipfs/importer/trickle"
mdag "github.com/ipfs/go-ipfs/merkledag"
ft "github.com/ipfs/go-ipfs/unixfs" ft "github.com/ipfs/go-ipfs/unixfs"
uio "github.com/ipfs/go-ipfs/unixfs/io" uio "github.com/ipfs/go-ipfs/unixfs/io"
testu "github.com/ipfs/go-ipfs/unixfs/test" testu "github.com/ipfs/go-ipfs/unixfs/test"
...@@ -105,7 +106,7 @@ func TestDagModifierBasic(t *testing.T) { ...@@ -105,7 +106,7 @@ func TestDagModifierBasic(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
size, err := ft.DataSize(node.Data()) size, err := ft.DataSize(node.(*mdag.ProtoNode).Data())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论