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))