mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-05 16:28:06 +08:00
Finish basic support for raw nodes in dag modifier.
License: MIT Signed-off-by: Kevin Atkinson <k@kevina.org>
This commit is contained in:
parent
c75ac6a7fa
commit
47001548e1
@ -15,6 +15,7 @@ test_expect_success "can create some files for testing" '
|
||||
FILE1=$(echo foo | ipfs add -q) &&
|
||||
FILE2=$(echo bar | ipfs add -q) &&
|
||||
FILE3=$(echo baz | ipfs add -q) &&
|
||||
FILE9=$(echo zip | ipfs add -q --raw-leaves) &&
|
||||
mkdir stuff_test &&
|
||||
echo cats > stuff_test/a &&
|
||||
echo dogs > stuff_test/b &&
|
||||
@ -252,6 +253,42 @@ test_files_api() {
|
||||
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_expect_success "read from offset works" '
|
||||
|
||||
@ -152,23 +152,25 @@ func (dm *DagModifier) Write(b []byte) (int, error) {
|
||||
var ErrNoRawYet = fmt.Errorf("currently only fully support protonodes in the dagmodifier")
|
||||
|
||||
func (dm *DagModifier) Size() (int64, error) {
|
||||
pbnd, ok := dm.curNode.(*mdag.ProtoNode)
|
||||
if !ok {
|
||||
return 0, ErrNoRawYet
|
||||
}
|
||||
|
||||
pbn, err := ft.FromBytes(pbnd.Data())
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if dm.wrBuf != nil {
|
||||
if uint64(dm.wrBuf.Len())+dm.writeStart > pbn.GetFilesize() {
|
||||
switch nd := dm.curNode.(type) {
|
||||
case *mdag.ProtoNode:
|
||||
pbn, err := ft.FromBytes(nd.Data())
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if dm.wrBuf != nil && uint64(dm.wrBuf.Len())+dm.writeStart > pbn.GetFilesize() {
|
||||
return int64(dm.wrBuf.Len()) + int64(dm.writeStart), 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
|
||||
}
|
||||
|
||||
return int64(pbn.GetFilesize()), nil
|
||||
}
|
||||
|
||||
// Sync writes changes to this dag to disk
|
||||
@ -397,12 +399,12 @@ func (dm *DagModifier) CtxReadFull(ctx context.Context, b []byte) (int, error) {
|
||||
}
|
||||
|
||||
// GetNode gets the modified DAG Node
|
||||
func (dm *DagModifier) GetNode() (*mdag.ProtoNode, error) {
|
||||
func (dm *DagModifier) GetNode() (node.Node, error) {
|
||||
err := dm.Sync()
|
||||
if err != nil {
|
||||
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
|
||||
|
||||
@ -9,6 +9,7 @@ import (
|
||||
|
||||
h "github.com/ipfs/go-ipfs/importer/helpers"
|
||||
trickle "github.com/ipfs/go-ipfs/importer/trickle"
|
||||
mdag "github.com/ipfs/go-ipfs/merkledag"
|
||||
ft "github.com/ipfs/go-ipfs/unixfs"
|
||||
uio "github.com/ipfs/go-ipfs/unixfs/io"
|
||||
testu "github.com/ipfs/go-ipfs/unixfs/test"
|
||||
@ -105,7 +106,7 @@ func TestDagModifierBasic(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
size, err := ft.DataSize(node.Data())
|
||||
size, err := ft.DataSize(node.(*mdag.ProtoNode).Data())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user