@cryptotaxi247 / kubo / commits / dc6fdd39c

use encoded (pretty) keys only on fs ds

Juan Batiz-Benet committed Oct 8, 2014 at 14:49 UTC dc6fdd39c58264fd206c54a9fc793a0a01ebe19b
2 files changed +29 -5
core/datastore.go
+5 -1
@@ -5,9 +5,12 @@ import (
5
6 ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
7 fsds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go/fs"
8 + ktds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go/keytransform"
9 lds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go/leveldb"
10 syncds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go/sync"
11 +
12 config "github.com/jbenet/go-ipfs/config"
13 + u "github.com/jbenet/go-ipfs/util"
14 )
15
16 func makeDatastore(cfg config.Datastore) (ds.ThreadSafeDatastore, error) {
@@ -28,7 +31,8 @@ func makeDatastore(cfg config.Datastore) (ds.ThreadSafeDatastore, error) {
31 if err != nil {
32 return nil, err
33 }
31 - return syncds.MutexWrap(d), nil
34 + ktd := ktds.WrapDatastore(d, u.DsKeyB58Encode)
35 + return syncds.MutexWrap(ktd), nil
36 }
37
38 return nil, fmt.Errorf("Unknown datastore type: %s", cfg.Type)
util/util.go
+24 -4
@@ -55,14 +55,34 @@ func (k Key) Pretty() string {
55
56 // DsKey returns a Datastore key
57 func (k Key) DsKey() ds.Key {
58 - return ds.NewKey(k.Pretty())
58 + return ds.NewKey(string(k))
59 }
60
61 // KeyFromDsKey returns a Datastore key
62 func KeyFromDsKey(dsk ds.Key) Key {
63 - l := dsk.List()
64 - enc := l[len(l)-1]
65 - return Key(b58.Decode(enc))
63 + return Key(dsk.BaseNamespace())
64 +}
65 +
66 +// DsKeyB58Encode returns a B58 encoded Datastore key
67 +// TODO: this is hacky because it encodes every path component. some
68 +// path components may be proper strings already...
69 +func DsKeyB58Encode(dsk ds.Key) ds.Key {
70 + k := ds.NewKey("/")
71 + for _, n := range dsk.Namespaces() {
72 + k = k.Child(b58.Encode([]byte(n)))
73 + }
74 + return k
75 +}
76 +
77 +// DsKeyB58Decode returns a b58 decoded Datastore key
78 +// TODO: this is hacky because it encodes every path component. some
79 +// path components may be proper strings already...
80 +func DsKeyB58Decode(dsk ds.Key) ds.Key {
81 + k := ds.NewKey("/")
82 + for _, n := range dsk.Namespaces() {
83 + k = k.Child(string(b58.Decode(n)))
84 + }
85 + return k
86 }
87
88 // Hash is the global IPFS hash function. uses multihash SHA2_256, 256 bits