From d05d018894e5cbb917be19679bd213a18791c03b Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Wed, 8 Jun 2016 13:04:13 +0200 Subject: [PATCH 1/3] Disable resolving of the typ by default in ls Add option to resolve type using ls but set it to false by default. License: MIT Signed-off-by: Jakub Sztandera --- core/commands/ls.go | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/core/commands/ls.go b/core/commands/ls.go index 979a93081cc..c93c5b82e29 100644 --- a/core/commands/ls.go +++ b/core/commands/ls.go @@ -45,6 +45,7 @@ format: }, Options: []cmds.Option{ cmds.BoolOption("headers", "v", "Print table headers (Hash, Size, Name).").Default(false), + cmds.BoolOption("resolve-type", "Resolve linked objects to find ouy their types").Default(false), }, Run: func(req cmds.Request, res cmds.Response) { node, err := req.InvocContext().GetNode() @@ -59,6 +60,12 @@ format: return } + resolve, _, err := req.Option("resolve-type").Bool() + if err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + paths := req.Arguments() var dagnodes []*merkledag.Node @@ -79,21 +86,27 @@ format: } for j, link := range dagnode.Links { var linkNode *merkledag.Node - linkNode, err = link.GetNode(req.Context(), node.DAG) - if err != nil { - res.SetError(err, cmds.ErrNormal) - return - } - d, err := unixfs.FromBytes(linkNode.Data) - if err != nil { - res.SetError(err, cmds.ErrNormal) - return + t := unixfspb.Data_DataType(-1) + + if resolve { + linkNode, err = link.GetNode(req.Context(), node.DAG) + if err == nil { + d, err := unixfs.FromBytes(linkNode.Data) + if err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + t = d.GetType() + } else { + res.SetError(err, cmds.ErrNormal) + return + } } output[i].Links[j] = LsLink{ Name: link.Name, Hash: link.Hash.B58String(), Size: link.Size, - Type: d.GetType(), + Type: t, } } } From 399ff388bb89ebfd01b51d63a8b5e916479e187d Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Mon, 13 Jun 2016 15:13:33 +0200 Subject: [PATCH 2/3] Make ipfs ls show type if it is avaliable locally License: MIT Signed-off-by: Jakub Sztandera --- core/commands/ls.go | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/core/commands/ls.go b/core/commands/ls.go index c93c5b82e29..f3d603aa843 100644 --- a/core/commands/ls.go +++ b/core/commands/ls.go @@ -6,6 +6,7 @@ import ( "io" "text/tabwriter" + key "github.com/ipfs/go-ipfs/blocks/key" cmds "github.com/ipfs/go-ipfs/commands" core "github.com/ipfs/go-ipfs/core" merkledag "github.com/ipfs/go-ipfs/merkledag" @@ -87,20 +88,35 @@ format: for j, link := range dagnode.Links { var linkNode *merkledag.Node t := unixfspb.Data_DataType(-1) + linkKey := key.Key(link.Hash) + if ok, err := node.Blockstore.Has(linkKey); ok && err == nil { + b, err := node.Blockstore.Get(linkKey) + if err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + linkNode, err = merkledag.DecodeProtobuf(b.Data()) + if err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + } - if resolve { + if linkNode == nil && resolve { linkNode, err = link.GetNode(req.Context(), node.DAG) - if err == nil { - d, err := unixfs.FromBytes(linkNode.Data) - if err != nil { - res.SetError(err, cmds.ErrNormal) - return - } - t = d.GetType() - } else { + if err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + } + if linkNode != nil { + d, err := unixfs.FromBytes(linkNode.Data) + if err != nil { res.SetError(err, cmds.ErrNormal) return } + + t = d.GetType() } output[i].Links[j] = LsLink{ Name: link.Name, From aec9a6544ddca2d1f33d2391eca49b5415da3938 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Tue, 21 Jun 2016 07:46:12 +0200 Subject: [PATCH 3/3] Make resolve-type default to true License: MIT Signed-off-by: Jakub Sztandera --- core/commands/ls.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/commands/ls.go b/core/commands/ls.go index f3d603aa843..9bcfd79563c 100644 --- a/core/commands/ls.go +++ b/core/commands/ls.go @@ -46,7 +46,7 @@ format: }, Options: []cmds.Option{ cmds.BoolOption("headers", "v", "Print table headers (Hash, Size, Name).").Default(false), - cmds.BoolOption("resolve-type", "Resolve linked objects to find ouy their types").Default(false), + cmds.BoolOption("resolve-type", "Resolve linked objects to find out their types.").Default(true), }, Run: func(req cmds.Request, res cmds.Response) { node, err := req.InvocContext().GetNode()