@cryptotaxi247 / kubo / commits / e42c96729

add option to only hash input

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Jun 22, 2015 at 15:21 UTC e42c967297d048dbf28152f81310008056758003
2 files changed +25 -3
core/builder.go
+14 -3
@@ -23,6 +23,7 @@ type NodeBuilder struct {
23 peerhost HostOption
24 repo repo.Repo
25 built bool
26 + nilrepo bool
27 }
28
29 func NewNodeBuilder() *NodeBuilder {
@@ -33,7 +34,7 @@ func NewNodeBuilder() *NodeBuilder {
34 }
35 }
36
36 -func defaultRepo() (repo.Repo, error) {
37 +func defaultRepo(dstore ds.ThreadSafeDatastore) (repo.Repo, error) {
38 c := cfg.Config{}
39 priv, pub, err := ci.GenerateKeyPairWithReader(ci.RSA, 1024, rand.Reader)
40 if err != nil {
@@ -56,7 +57,7 @@ func defaultRepo() (repo.Repo, error) {
57 c.Identity.PrivKey = base64.StdEncoding.EncodeToString(privkeyb)
58
59 return &repo.Mock{
59 - D: dsync.MutexWrap(ds.NewMapDatastore()),
60 + D: dstore,
61 C: c,
62 }, nil
63 }
@@ -86,13 +87,23 @@ func (nb *NodeBuilder) SetRepo(r repo.Repo) *NodeBuilder {
87 return nb
88 }
89
90 +func (nb *NodeBuilder) NilRepo() *NodeBuilder {
91 + nb.nilrepo = true
92 + return nb
93 +}
94 +
95 func (nb *NodeBuilder) Build(ctx context.Context) (*IpfsNode, error) {
96 if nb.built {
97 return nil, ErrAlreadyBuilt
98 }
99 nb.built = true
100 if nb.repo == nil {
95 - r, err := defaultRepo()
101 + var d ds.Datastore
102 + d = ds.NewMapDatastore()
103 + if nb.nilrepo {
104 + d = ds.NewNullDatastore()
105 + }
106 + r, err := defaultRepo(dsync.MutexWrap(d))
107 if err != nil {
108 return nil, err
109 }
core/commands/add.go
+11
@@ -58,6 +58,7 @@ remains to be implemented.
58 cmds.BoolOption(progressOptionName, "p", "Stream progress data"),
59 cmds.BoolOption(wrapOptionName, "w", "Wrap files with a directory object"),
60 cmds.BoolOption(trickleOptionName, "t", "Use trickle-dag format for dag generation"),
61 + cmds.BoolOption("only-hash", "n", "Only chunk and hash the specified content, don't write to disk"),
62 },
63 PreRun: func(req cmds.Request) error {
64 if quiet, _, _ := req.Option("quiet").Bool(); quiet {
@@ -92,6 +93,16 @@ remains to be implemented.
93 progress, _, _ := req.Option(progressOptionName).Bool()
94 trickle, _, _ := req.Option(trickleOptionName).Bool()
95 wrap, _, _ := req.Option(wrapOptionName).Bool()
96 + hash, _, _ := req.Option("only-hash").Bool()
97 +
98 + if hash {
99 + nilnode, err := core.NewNodeBuilder().NilRepo().Build(n.Context())
100 + if err != nil {
101 + res.SetError(err, cmds.ErrNormal)
102 + return
103 + }
104 + n = nilnode
105 + }
106
107 outChan := make(chan interface{}, 8)
108 res.SetOutput((<-chan interface{})(outChan))