github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/unixfs/io/dirbuilder.go (about) 1 package io 2 3 import ( 4 "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context" 5 6 key "github.com/ipfs/go-ipfs/blocks/key" 7 mdag "github.com/ipfs/go-ipfs/merkledag" 8 format "github.com/ipfs/go-ipfs/unixfs" 9 ) 10 11 type directoryBuilder struct { 12 dserv mdag.DAGService 13 dirnode *mdag.Node 14 } 15 16 // NewEmptyDirectory returns an empty merkledag Node with a folder Data chunk 17 func NewEmptyDirectory() *mdag.Node { 18 return &mdag.Node{Data: format.FolderPBData()} 19 } 20 21 // NewDirectory returns a directoryBuilder. It needs a DAGService to add the Children 22 func NewDirectory(dserv mdag.DAGService) *directoryBuilder { 23 db := new(directoryBuilder) 24 db.dserv = dserv 25 db.dirnode = NewEmptyDirectory() 26 return db 27 } 28 29 // AddChild adds a (name, key)-pair to the root node. 30 func (d *directoryBuilder) AddChild(ctx context.Context, name string, k key.Key) error { 31 cnode, err := d.dserv.Get(ctx, k) 32 if err != nil { 33 return err 34 } 35 36 return d.dirnode.AddNodeLinkClean(name, cnode) 37 } 38 39 // GetNode returns the root of this directoryBuilder 40 func (d *directoryBuilder) GetNode() *mdag.Node { 41 return d.dirnode 42 }