diff --git a/src/cli/commands/dag.js b/src/cli/commands/dag.js new file mode 100644 index 0000000000..d3653920fc --- /dev/null +++ b/src/cli/commands/dag.js @@ -0,0 +1,15 @@ +'use strict' + +module.exports = { + command: 'dag', + + description: 'Interact with ipld dag objects.', + + builder (yargs) { + return yargs + .commandDir('dag') + }, + + handler (argv) { + } +} diff --git a/src/cli/commands/dag/get.js b/src/cli/commands/dag/get.js new file mode 100644 index 0000000000..4100b533ed --- /dev/null +++ b/src/cli/commands/dag/get.js @@ -0,0 +1,47 @@ +'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') + +module.exports = { + command: 'get ', + + describe: 'Get a dag node from ipfs.', + + builder: {}, + + handler (argv) { + utils.getIPFS((err, ipfs) => { + if (err) { + throw err + } + + const refParts = argv.ref.split('/') + const cidString = refParts[0] + const pathString = refParts.slice(1).join('/') + const cid = new CID(cidString) + + let lookupFn + if (pathString) { + lookupFn = () => ipfs.dag.resolve(cid, pathString) + } else { + lookupFn = () => ipfs.dag.get(cid) + } + + lookupFn() + .then((obj) => { + if (Buffer.isBuffer(obj)) { + console.log('0x' + obj.toString('hex')) + } else { + console.log(obj) + } + }) + .catch((err) => { + console.error(err) + }) + }) + } +} diff --git a/test/cli/commands.js b/test/cli/commands.js index 1a7c622add..2d6d44ea76 100644 --- a/test/cli/commands.js +++ b/test/cli/commands.js @@ -4,7 +4,7 @@ const expect = require('chai').expect const runOnAndOff = require('../utils/on-and-off') -const commandCount = 61 +const commandCount = 63 describe('commands', () => runOnAndOff((thing) => { let ipfs diff --git a/test/cli/dag.js b/test/cli/dag.js new file mode 100644 index 0000000000..659c4b737e --- /dev/null +++ b/test/cli/dag.js @@ -0,0 +1,25 @@ +/* eslint-env mocha */ +'use strict' + +const expect = require('chai').expect +const runOnAndOff = require('../utils/on-and-off') + +describe('dag', () => runOnAndOff.off((thing) => { + let ipfs + + before(() => { + ipfs = thing.ipfs + }) + + it('get', () => { + // put test eth-block + return ipfs('block put --format eth-block --mhtype keccak-256 test/test-data/eth-block').then((out) => { + expect(out).to.eql('z43AaGF23fmvRnDP56Ub9WcJCfzSfqtmzNCCvmz5eudT8dtdCDS') + // lookup path on eth-block + return ipfs('dag get z43AaGF23fmvRnDP56Ub9WcJCfzSfqtmzNCCvmz5eudT8dtdCDS/parentHash') + }).then((out) => { + let expectHash = new Buffer('c8c0a17305adea9bbb4b98a52d44f0c1478f5c48fc4b64739ee805242501b256', 'hex') + expect(out).to.be.eql('0x' + expectHash.toString('hex')) + }) + }) +}))