Skip to content
This repository has been archived by the owner on Feb 12, 2024. It is now read-only.

Commit

Permalink
Merge pull request #652 from ipfs/feat/block-put-flags
Browse files Browse the repository at this point in the history
CLI - add `block put` flags and `block get` CID support
  • Loading branch information
daviddias authored Dec 10, 2016
2 parents eea470b + 29bf12e commit 7add4d5
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 20 deletions.
8 changes: 5 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,23 +74,24 @@
"async": "^2.1.4",
"bl": "^1.1.2",
"boom": "^4.2.0",
"cids": "^0.3.4",
"debug": "^2.3.3",
"fs-pull-blob-store": "^0.3.0",
"glob": "^7.1.1",
"hapi": "^15.2.0",
"hapi-set-header": "^1.0.2",
"idb-pull-blob-store": "^0.5.1",
"ipfs-api": "^12.0.0",
"ipfs-bitswap": "^0.8.1",
"ipfs-bitswap": "^0.8.2",
"ipfs-block": "^0.5.0",
"ipfs-block-service": "^0.7.0",
"ipfs-block-service": "^0.7.1",
"ipfs-multipart": "^0.1.0",
"ipfs-repo": "^0.11.1",
"ipfs-unixfs": "^0.1.8",
"ipfs-unixfs-engine": "^0.14.0",
"ipld-dag-cbor": "^0.8.2",
"ipld-dag-pb": "^0.9.3",
"ipld-resolver": "^0.3.0",
"ipld-resolver": "^0.4.0",
"isstream": "^0.1.2",
"joi": "^10.0.1",
"libp2p-ipfs-browser": "^0.17.0",
Expand All @@ -104,6 +105,7 @@
"mafmt": "^2.1.2",
"multiaddr": "^2.1.1",
"multihashes": "^0.3.0",
"multihashing-async": "^0.3.0",
"path-exists": "^3.0.0",
"peer-book": "^0.3.0",
"peer-id": "^0.8.0",
Expand Down
12 changes: 6 additions & 6 deletions src/cli/commands/block/get.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict'

const utils = require('../../utils')
const mh = require('multihashes')
const CID = require('cids')
const debug = require('debug')
const log = debug('cli:block')
log.error = debug('cli:block:error')
Expand All @@ -19,17 +19,17 @@ module.exports = {
throw err
}

const hash = utils.isDaemonOn()
? argv.key
: mh.fromB58String(argv.key)
const cid = new CID(argv.key)

ipfs.block.get(hash, (err, block) => {
ipfs.block.get(cid, (err, block) => {
if (err) {
throw err
}

if (block.data) {
console.log(block.data.toString())
// writing the buffer to stdout seems to be the only way
// to send out binary data correctly
process.stdout.write(block.data)
return
}

Expand Down
59 changes: 50 additions & 9 deletions src/cli/commands/block/put.js
Original file line number Diff line number Diff line change
@@ -1,52 +1,93 @@
'use strict'

const utils = require('../../utils')
const mh = require('multihashes')
const bl = require('bl')
const fs = require('fs')
const Block = require('ipfs-block')
const CID = require('cids')
const multihashing = require('multihashing-async')
const waterfall = require('async/waterfall')
const debug = require('debug')
const log = debug('cli:block')
log.error = debug('cli:block:error')

function addBlock (buf) {
function addBlock (buf, opts) {
let block = new Block(buf)
let cid

utils.getIPFS((err, ipfs) => {
if (err) {
throw err
}

waterfall([
(cb) => ipfs.block.put(new Block(buf), cb),
(block, cb) => block.key(cb)
], (err, key) => {
(cb) => generateHash(block, opts, cb),
(mhash, cb) => generateCid(mhash, block, opts, cb),
(cb) => ipfs.block.put(block, cid, cb)
], (err) => {
if (err) {
throw err
}

console.log(mh.toB58String(key))
console.log(cid.toBaseEncodedString())
})
})

function generateHash (block, opts, cb) {
if (opts.mhlen === undefined) {
multihashing(buf, opts.mhtype, cb)
} else {
multihashing(buf, opts.mhtype, opts.mhlen, cb)
}
}

function generateCid (mhash, block, opts, cb) {
cid = new CID(opts.verison, opts.format, mhash)
cb()
}
}

module.exports = {
command: 'put [data]',

describe: 'Stores input as an IPFS block',

builder: {},
builder: {
format: {
alias: 'f',
describe: 'cid format for blocks to be created with.',
default: 'v0'
},
mhtype: {
describe: 'multihash hash function',
default: 'sha2-256'
},
mhlen: {
describe: 'multihash hash length',
default: undefined
}
},

handler (argv) {
// parse options
if (argv.format === 'v0') {
argv.verison = 0
argv.format = 'dag-pb'
argv.mhtype = 'sha2-256'
} else {
argv.verison = 1
}

if (argv.data) {
return addBlock(fs.readFileSync(argv.data))
return addBlock(fs.readFileSync(argv.data), argv)
}

process.stdin.pipe(bl((err, input) => {
if (err) {
throw err
}

addBlock(input)
addBlock(input, argv)
}))
}
}
5 changes: 4 additions & 1 deletion src/cli/commands/block/stat.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict'

const utils = require('../../utils')
const CID = require('cids')
const debug = require('debug')
const log = debug('cli:block')
log.error = debug('cli:block:error')
Expand All @@ -13,12 +14,14 @@ module.exports = {
builder: {},

handler (argv) {
const cid = new CID(argv.key)

utils.getIPFS((err, ipfs) => {
if (err) {
throw err
}

ipfs.block.stat(argv.key, (err, stats) => {
ipfs.block.stat(cid, (err, stats) => {
if (err) {
throw err
}
Expand Down
10 changes: 9 additions & 1 deletion test/cli/test-block.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,17 @@ describe('block', () => {
})
})

it('put with flags, format and mhtype', () => {
return ipfs('block put --format eth-block --mhtype keccak-256 test/test-data/eth-block').then((out) => {
expect(out).to.be.eql(
'z43AaGF23fmvRnDP56Ub9WcJCfzSfqtmzNCCvmz5eudT8dtdCDS'
)
})
})

it('get', () => {
return ipfs('block get QmZjTnYw2TFhn9Nn7tjmPSoTBoY7YRkwPzwSrSbabY24Kp').then((out) => {
expect(out).to.be.eql('hello world\n')
expect(out).to.be.eql('hello world')
})
})

Expand Down
Binary file added test/test-data/eth-block
Binary file not shown.

0 comments on commit 7add4d5

Please sign in to comment.