From b5fd9492d70527dddc49482a2ff536d22403b6e2 Mon Sep 17 00:00:00 2001
From: Jeromy <jeromyj@gmail.com>
Date: Wed, 10 Sep 2014 20:56:29 +0000
Subject: [PATCH] fixes to make interface more usable

---
 core/commands/add.go           | 10 ++++++++++
 core/commands/commands.go      |  4 ++++
 core/core.go                   |  1 +
 fuse/readonly/readonly_unix.go | 31 ++++++++++++++++++++++++-------
 merkledag/merkledag.go         |  8 ++++++--
 routing/dht/routing.go         |  1 +
 6 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/core/commands/add.go b/core/commands/add.go
index 48a6ccae..c98ee145 100644
--- a/core/commands/add.go
+++ b/core/commands/add.go
@@ -103,6 +103,16 @@ func addFile(n *core.IpfsNode, fpath string, depth int) (*dag.Node, error) {
 		return nil, err
 	}
 
+	k, err := root.Key()
+	if err != nil {
+		return nil, err
+	}
+
+	log.Info("Adding file: %s = %s\n", fpath, k.Pretty())
+	for _, l := range root.Links {
+		log.Info("SubBlock: %s\n", l.Hash.B58String())
+	}
+
 	return root, addNode(n, root, fpath)
 }
 
diff --git a/core/commands/commands.go b/core/commands/commands.go
index 5bef54a7..b356d9bb 100644
--- a/core/commands/commands.go
+++ b/core/commands/commands.go
@@ -4,6 +4,10 @@ import (
 	"io"
 
 	"github.com/jbenet/go-ipfs/core"
+
+	logging "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/op/go-logging"
 )
 
+var log = logging.MustGetLogger("commands")
+
 type CmdFunc func(*core.IpfsNode, []string, map[string]interface{}, io.Writer) error
diff --git a/core/core.go b/core/core.go
index 459a32aa..005b6e62 100644
--- a/core/core.go
+++ b/core/core.go
@@ -16,6 +16,7 @@ import (
 	exchange "github.com/jbenet/go-ipfs/exchange"
 	bitswap "github.com/jbenet/go-ipfs/exchange/bitswap"
 	merkledag "github.com/jbenet/go-ipfs/merkledag"
+	namesys "github.com/jbenet/go-ipfs/namesys"
 	inet "github.com/jbenet/go-ipfs/net"
 	mux "github.com/jbenet/go-ipfs/net/mux"
 	netservice "github.com/jbenet/go-ipfs/net/service"
diff --git a/fuse/readonly/readonly_unix.go b/fuse/readonly/readonly_unix.go
index 897c90d7..03dba781 100644
--- a/fuse/readonly/readonly_unix.go
+++ b/fuse/readonly/readonly_unix.go
@@ -14,6 +14,8 @@ import (
 	"syscall"
 	"time"
 
+	"code.google.com/p/goprotobuf/proto"
+
 	"github.com/jbenet/go-ipfs/Godeps/_workspace/src/bazil.org/fuse"
 	"github.com/jbenet/go-ipfs/Godeps/_workspace/src/bazil.org/fuse/fs"
 	core "github.com/jbenet/go-ipfs/core"
@@ -72,20 +74,35 @@ func (*Root) ReadDir(intr fs.Intr) ([]fuse.Dirent, fuse.Error) {
 
 // Node is the core object representing a filesystem tree node.
 type Node struct {
-	Ipfs *core.IpfsNode
-	Nd   *mdag.Node
-	fd   *mdag.DagReader
+	Ipfs   *core.IpfsNode
+	Nd     *mdag.Node
+	fd     *mdag.DagReader
+	cached *mdag.PBData
+}
+
+func (s *Node) loadData() error {
+	s.cached = new(mdag.PBData)
+	return proto.Unmarshal(s.Nd.Data, s.cached)
 }
 
 // Attr returns the attributes of a given node.
 func (s *Node) Attr() fuse.Attr {
 	u.DOut("Node attr.\n")
-	if len(s.Nd.Links) > 0 {
+	if s.cached == nil {
+		s.loadData()
+	}
+	switch s.cached.GetType() {
+	case mdag.PBData_Directory:
+		u.DOut("this is a directory.\n")
 		return fuse.Attr{Mode: os.ModeDir | 0555}
+	case mdag.PBData_File, mdag.PBData_Raw:
+		u.DOut("this is a file.\n")
+		size, _ := s.Nd.Size()
+		return fuse.Attr{Mode: 0444, Size: uint64(size)}
+	default:
+		u.PErr("Invalid data type.")
+		return fuse.Attr{}
 	}
-
-	size, _ := s.Nd.Size()
-	return fuse.Attr{Mode: 0444, Size: uint64(size)}
 }
 
 // Lookup performs a lookup under this node.
diff --git a/merkledag/merkledag.go b/merkledag/merkledag.go
index 1ec5f3c5..1cc26278 100644
--- a/merkledag/merkledag.go
+++ b/merkledag/merkledag.go
@@ -3,7 +3,8 @@ package merkledag
 import (
 	"fmt"
 
-	"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/goprotobuf/proto"
+	proto "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/goprotobuf/proto"
+	logging "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/op/go-logging"
 
 	mh "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
 	blocks "github.com/jbenet/go-ipfs/blocks"
@@ -11,6 +12,8 @@ import (
 	u "github.com/jbenet/go-ipfs/util"
 )
 
+var log = logging.MustGetLogger("commands")
+
 // NodeMap maps u.Keys to Nodes.
 // We cannot use []byte/Multihash for keys :(
 // so have to convert Multihash bytes to string (u.Key)
@@ -105,7 +108,7 @@ type DAGService struct {
 // Add adds a node to the DAGService, storing the block in the BlockService
 func (n *DAGService) Add(nd *Node) (u.Key, error) {
 	k, _ := nd.Key()
-	u.DOut("DagService Add [%s]\n", k.Pretty())
+	log.Debug("DagService Add [%s]\n", k.Pretty())
 	if n == nil {
 		return "", fmt.Errorf("DAGService is nil")
 	}
@@ -126,6 +129,7 @@ func (n *DAGService) Add(nd *Node) (u.Key, error) {
 func (n *DAGService) AddRecursive(nd *Node) error {
 	_, err := n.Add(nd)
 	if err != nil {
+		log.Info("AddRecursive Error: %s\n", err)
 		return err
 	}
 
diff --git a/routing/dht/routing.go b/routing/dht/routing.go
index 66ae0984..16f74380 100644
--- a/routing/dht/routing.go
+++ b/routing/dht/routing.go
@@ -101,6 +101,7 @@ func (dht *IpfsDHT) Provide(ctx context.Context, key u.Key) error {
 	dht.providers.AddProvider(key, dht.self)
 	peers := dht.routingTables[0].NearestPeers(kb.ConvertKey(key), PoolSize)
 	if len(peers) == 0 {
+		// Early out for no targets
 		return nil
 	}
 
-- 
GitLab