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  }