1
1
package commands
2
2
3
3
import (
4
- "bytes"
5
- "context"
6
- "errors"
7
4
"fmt"
8
5
"io"
9
- "io/ioutil"
10
6
"os"
11
7
12
8
util "github.com/ipfs/go-ipfs/blocks/blockstoreutil"
13
- e "github.com/ipfs/go-ipfs/core/commands/e"
9
+ "github.com/ipfs/go-ipfs/core/commands/e"
10
+ coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
11
+ "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
14
12
15
13
"gx/ipfs/QmNueRyPRQiV7PUEpnP4GgGLuK1rKQLaRW7sfPvUetYig1/go-ipfs-cmds"
16
14
mh "gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
17
- blocks "gx/ipfs/QmVzK524a2VWLqyvtBeiHKsUAWYgeAk4DBeZoY7vpNPNRx/go-block-format"
18
- cid "gx/ipfs/QmYVNvtQkeZ6AKSwDrjQTs432QtL6umrrK41EBq3cu7iSP/go-cid"
19
15
"gx/ipfs/QmdE4gMduCKCGAcczM2F5ioYDfdeKuPix138wrES1YSr7f/go-ipfs-cmdkit"
20
16
)
21
17
@@ -63,15 +59,27 @@ on raw IPFS blocks. It outputs the following to stdout:
63
59
cmdkit .StringArg ("key" , true , false , "The base58 multihash of an existing block to stat." ).EnableStdin (),
64
60
},
65
61
Run : func (req * cmds.Request , res cmds.ResponseEmitter , env cmds.Environment ) {
66
- b , err := getBlockForKey (req .Context , env , req .Arguments [0 ])
62
+ api , err := GetApi (env )
63
+ if err != nil {
64
+ res .SetError (err , cmdkit .ErrNormal )
65
+ return
66
+ }
67
+
68
+ p , err := coreiface .ParsePath (req .Arguments [0 ])
69
+ if err != nil {
70
+ res .SetError (err , cmdkit .ErrNormal )
71
+ return
72
+ }
73
+
74
+ b , err := api .Block ().Stat (req .Context , p )
67
75
if err != nil {
68
76
res .SetError (err , cmdkit .ErrNormal )
69
77
return
70
78
}
71
79
72
80
err = cmds .EmitOnce (res , & BlockStat {
73
- Key : b .Cid ().String (),
74
- Size : len ( b . RawData () ),
81
+ Key : b .Path (). Cid ().String (),
82
+ Size : b . Size ( ),
75
83
})
76
84
if err != nil {
77
85
log .Error (err )
@@ -103,13 +111,25 @@ It outputs to stdout, and <key> is a base58 encoded multihash.
103
111
cmdkit .StringArg ("key" , true , false , "The base58 multihash of an existing block to get." ).EnableStdin (),
104
112
},
105
113
Run : func (req * cmds.Request , res cmds.ResponseEmitter , env cmds.Environment ) {
106
- b , err := getBlockForKey (req .Context , env , req .Arguments [0 ])
114
+ api , err := GetApi (env )
115
+ if err != nil {
116
+ res .SetError (err , cmdkit .ErrNormal )
117
+ return
118
+ }
119
+
120
+ p , err := coreiface .ParsePath (req .Arguments [0 ])
121
+ if err != nil {
122
+ res .SetError (err , cmdkit .ErrNormal )
123
+ return
124
+ }
125
+
126
+ r , err := api .Block ().Get (req .Context , p )
107
127
if err != nil {
108
128
res .SetError (err , cmdkit .ErrNormal )
109
129
return
110
130
}
111
131
112
- err = res .Emit (bytes . NewReader ( b . RawData ()) )
132
+ err = res .Emit (r )
113
133
if err != nil {
114
134
log .Error (err )
115
135
}
@@ -137,7 +157,7 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
137
157
cmdkit .IntOption ("mhlen" , "multihash hash length" ).WithDefault (- 1 ),
138
158
},
139
159
Run : func (req * cmds.Request , res cmds.ResponseEmitter , env cmds.Environment ) {
140
- n , err := GetNode (env )
160
+ api , err := GetApi (env )
141
161
if err != nil {
142
162
res .SetError (err , cmdkit .ErrNormal )
143
163
return
@@ -149,18 +169,6 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
149
169
return
150
170
}
151
171
152
- data , err := ioutil .ReadAll (file )
153
- if err != nil {
154
- res .SetError (err , cmdkit .ErrNormal )
155
- return
156
- }
157
-
158
- err = file .Close ()
159
- if err != nil {
160
- res .SetError (err , cmdkit .ErrNormal )
161
- return
162
- }
163
-
164
172
mhtype , _ := req .Options ["mhtype" ].(string )
165
173
mhtval , ok := mh .Names [mhtype ]
166
174
if ! ok {
@@ -169,8 +177,11 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
169
177
return
170
178
}
171
179
172
- var pref cid.Prefix
173
- pref .Version = 1
180
+ mhlen , ok := req .Options ["mhlen" ].(int )
181
+ if ! ok {
182
+ res .SetError ("missing option \" mhlen\" " , cmdkit .ErrNormal )
183
+ return
184
+ }
174
185
175
186
format , formatSet := req .Options ["format" ].(string )
176
187
if ! formatSet {
@@ -181,50 +192,15 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
181
192
}
182
193
}
183
194
184
- if format == "v0" {
185
- pref .Version = 0
186
- }
187
- formatval , ok := cid .Codecs [format ]
188
- if ! ok {
189
- res .SetError (fmt .Errorf ("unrecognized format: '%s'" , format ), cmdkit .ErrNormal )
190
- return
191
- }
192
- if mhtval != mh .SHA2_256 && pref .Version == 0 {
193
- res .SetError (errors .New ("cannot generate CIDv0 with non-sha256 hash function" ), cmdkit .ErrNormal )
194
- return
195
- }
196
-
197
- pref .Codec = formatval
198
- pref .MhType = mhtval
199
-
200
- mhlen , ok := req .Options ["mhlen" ].(int )
201
- if ! ok {
202
- res .SetError ("missing option \" mhlen\" " , cmdkit .ErrNormal )
203
- return
204
- }
205
- pref .MhLength = mhlen
206
-
207
- bcid , err := pref .Sum (data )
208
- if err != nil {
209
- res .SetError (err , cmdkit .ErrNormal )
210
- return
211
- }
212
-
213
- b , err := blocks .NewBlockWithCid (data , bcid )
214
- if err != nil {
215
- res .SetError (err , cmdkit .ErrNormal )
216
- return
217
- }
218
-
219
- err = n .Blocks .AddBlock (b )
195
+ p , err := api .Block ().Put (req .Context , file , options .Block .Hash (mhtval , mhlen ), options .Block .Format (format ))
220
196
if err != nil {
221
197
res .SetError (err , cmdkit .ErrNormal )
222
198
return
223
199
}
224
200
225
201
err = cmds .EmitOnce (res , & BlockStat {
226
- Key : b .Cid ().String (),
227
- Size : len ( data ),
202
+ Key : p . Path () .Cid ().String (),
203
+ Size : p . Size ( ),
228
204
})
229
205
if err != nil {
230
206
log .Error (err )
@@ -243,29 +219,6 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
243
219
Type : BlockStat {},
244
220
}
245
221
246
- func getBlockForKey (ctx context.Context , env cmds.Environment , skey string ) (blocks.Block , error ) {
247
- if len (skey ) == 0 {
248
- return nil , fmt .Errorf ("zero length cid invalid" )
249
- }
250
-
251
- n , err := GetNode (env )
252
- if err != nil {
253
- return nil , err
254
- }
255
-
256
- c , err := cid .Decode (skey )
257
- if err != nil {
258
- return nil , err
259
- }
260
-
261
- b , err := n .Blocks .GetBlock (ctx , c )
262
- if err != nil {
263
- return nil , err
264
- }
265
-
266
- return b , nil
267
- }
268
-
269
222
var blockRmCmd = & cmds.Command {
270
223
Helptext : cmdkit.HelpText {
271
224
Tagline : "Remove IPFS block(s)." ,
@@ -282,38 +235,40 @@ It takes a list of base58 encoded multihashes to remove.
282
235
cmdkit .BoolOption ("quiet" , "q" , "Write minimal output." ),
283
236
},
284
237
Run : func (req * cmds.Request , res cmds.ResponseEmitter , env cmds.Environment ) {
285
- n , err := GetNode (env )
238
+ api , err := GetApi (env )
286
239
if err != nil {
287
240
res .SetError (err , cmdkit .ErrNormal )
288
241
return
289
242
}
290
- hashes := req . Arguments
243
+
291
244
force , _ := req .Options ["force" ].(bool )
292
245
quiet , _ := req .Options ["quiet" ].(bool )
293
- cids := make ([]* cid.Cid , 0 , len (hashes ))
294
- for _ , hash := range hashes {
295
- c , err := cid .Decode (hash )
246
+
247
+ // TODO: use batching coreapi when done
248
+ for _ , b := range req .Arguments {
249
+ p , err := coreiface .ParsePath (b )
296
250
if err != nil {
297
- err = fmt .Errorf ("invalid content id: %s (%s)" , hash , err )
298
251
res .SetError (err , cmdkit .ErrNormal )
299
252
return
300
253
}
301
254
302
- cids = append (cids , c )
303
- }
304
- ch , err := util .RmBlocks (n .Blockstore , n .Pinning , cids , util.RmBlocksOpts {
305
- Quiet : quiet ,
306
- Force : force ,
307
- })
255
+ rp , err := api .ResolvePath (req .Context , p )
256
+ if err != nil {
257
+ res .SetError (err , cmdkit .ErrNormal )
258
+ return
259
+ }
308
260
309
- if err != nil {
310
- res .SetError (err , cmdkit .ErrNormal )
311
- return
312
- }
261
+ err = api .Block ().Rm (req .Context , rp , options .Block .Force (force ))
262
+ if err != nil && ! quiet {
263
+ res .Emit (& util.RemovedBlock {
264
+ Hash : rp .Cid ().String (),
265
+ Error : err .Error (),
266
+ })
267
+ }
313
268
314
- err = res .Emit (ch )
315
- if err != nil {
316
- log . Error ( err )
269
+ res .Emit (& util. RemovedBlock {
270
+ Hash : rp . Cid (). String (),
271
+ } )
317
272
}
318
273
},
319
274
PostRun : cmds.PostRunMap {
0 commit comments