github.com/zignig/go-ipfs@v0.0.0-20141111235910-c9e5fdf55a52/core/commands2/cat.go (about) 1 package commands 2 3 import ( 4 "io" 5 6 cmds "github.com/jbenet/go-ipfs/commands" 7 core "github.com/jbenet/go-ipfs/core" 8 "github.com/jbenet/go-ipfs/core/commands2/internal" 9 uio "github.com/jbenet/go-ipfs/unixfs/io" 10 ) 11 12 var catCmd = &cmds.Command{ 13 Description: "Show IPFS object data", 14 Help: `Retrieves the object named by <ipfs-path> and outputs the data 15 it contains. 16 `, 17 18 Arguments: []cmds.Argument{ 19 cmds.StringArg("ipfs-path", true, true, "The path to the IPFS object(s) to be outputted"), 20 }, 21 Run: func(req cmds.Request) (interface{}, error) { 22 node := req.Context().Node 23 readers := make([]io.Reader, 0, len(req.Arguments())) 24 25 paths, err := internal.CastToStrings(req.Arguments()) 26 if err != nil { 27 return nil, err 28 } 29 30 readers, err = cat(node, paths) 31 if err != nil { 32 return nil, err 33 } 34 35 reader := io.MultiReader(readers...) 36 return reader, nil 37 }, 38 } 39 40 func cat(node *core.IpfsNode, paths []string) ([]io.Reader, error) { 41 readers := make([]io.Reader, 0, len(paths)) 42 for _, path := range paths { 43 dagnode, err := node.Resolver.ResolvePath(path) 44 if err != nil { 45 return nil, err 46 } 47 read, err := uio.NewDagReader(dagnode, node.DAG) 48 if err != nil { 49 return nil, err 50 } 51 readers = append(readers, read) 52 } 53 return readers, nil 54 }