From bbe6d1cc16a4918be499bb937cbbe59b427a1f16 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 5 Nov 2015 15:03:45 +0000 Subject: [PATCH 01/16] jsipfs roadmap --- README.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a4e3c68977..91e75915e7 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ js-ipfs -========= +======= > IPFS JavaScript implementation entry point and roadmap # Description -This repo will contain the entry point for the JavaScript implementation of IPFS spec, similar to [go-ipfs](https://github.com/ipfs/go-ipfs). Right now, it holds the roadmap for the development of modules for js-ipfs, as well as their current state. +This repo will contain the entry point for the JavaScript implementation of IPFS spec, similar to [go-ipfs](https://github.com/ipfs/go-ipfs). We are building js-ipfs because it will inform how go-ipfs works, separate concerns, and allow a complete in-browser-tab implementation with no install friction. Most of the work for IPFS does happen elsewhere, but this is an equally important part of our roadmap to lead to a permanent, IPFSed web. @@ -23,7 +23,17 @@ IPFS implementation in JavaScript is a work in progress. As such, there's a few > **Not ready for prime time yet** -# Roadmap + +# Getting jsipfs out the door + +In order to start enabling applications to use the IPFS JavaScript library sooner, we are releasing a version that presents the full API one could expect from a IPFS node, but delegating all the operations on an IPFS node inside the network, using the js-ipfs-api module. The next will be replacing the internal components as the necessary layers for IPFS get developed. + +- [ ] Implement IPFS api in JS and use a network node for the operations +- [ ] Build a jsipfs cli with feature parity to go-ipfs cli +- [ ] Build bitswap to work over HTTP to talk with the gateways. Performance can be gained through doing the same requests to several nodes and then presenting our want list and stream from several nodes at the same time. Hash checksum is done on the JS itself + +# Roadmap for the full IPFS implementation in JavaScript + - Network - [ ] [libp2p-website](https://github.com/diasdavid/libp2p-website). From ae8658218b7c7bd00855707602e8e4baae14cbc9 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 5 Nov 2015 16:14:57 +0000 Subject: [PATCH 02/16] add commands for ronin --- README.md | 28 ++++++++++++++++++++++++++-- bin.js | 9 +++++++++ commands/add.js | 0 commands/cat.js | 0 commands/commands.js | 0 commands/daemon.js | 0 commands/dns.js | 0 commands/get.js | 0 commands/id.js | 0 commands/init.js | 0 commands/ls.js | 0 commands/mount.js | 0 commands/ping.js | 0 commands/refs.js | 0 commands/resolve.js | 0 commands/update.js | 0 commands/version.js | 0 package.json | 38 ++++++++++++++++++++++++++++++++++++++ src/index.js | 27 +++++++++++++++++++++++++++ 19 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 bin.js create mode 100644 commands/add.js create mode 100644 commands/cat.js create mode 100644 commands/commands.js create mode 100644 commands/daemon.js create mode 100644 commands/dns.js create mode 100644 commands/get.js create mode 100644 commands/id.js create mode 100644 commands/init.js create mode 100644 commands/ls.js create mode 100644 commands/mount.js create mode 100644 commands/ping.js create mode 100644 commands/refs.js create mode 100644 commands/resolve.js create mode 100644 commands/update.js create mode 100644 commands/version.js create mode 100644 package.json create mode 100644 src/index.js diff --git a/README.md b/README.md index 91e75915e7..dd1ef4af28 100644 --- a/README.md +++ b/README.md @@ -21,10 +21,34 @@ IPFS implementation in JavaScript is a work in progress. As such, there's a few # Usage -> **Not ready for prime time yet** +> **Disclamer: Currently, js-ipfs is not a full IPFS node, it delegates all of its operations to a IPFS node available in the network, see "Getting jsipfs ready" below for more details. +### Installation -# Getting jsipfs out the door +```bash +$ npm i ipfs --save +``` + +```JavaScript +var IPFS = require('ipfs') + +var node = new IPFS() +``` + +### Command line tool + +In order to use js-ipfs as a CLI, you must install it with the -g flag. + +```bash +$ npm i ipfs -g +``` + +The cli is availble through `jsipfs` in your terminal + +### API + + +# Getting jsipfs ready In order to start enabling applications to use the IPFS JavaScript library sooner, we are releasing a version that presents the full API one could expect from a IPFS node, but delegating all the operations on an IPFS node inside the network, using the js-ipfs-api module. The next will be replacing the internal components as the necessary layers for IPFS get developed. diff --git a/bin.js b/bin.js new file mode 100644 index 0000000000..3dcf9c8e0a --- /dev/null +++ b/bin.js @@ -0,0 +1,9 @@ +#! /usr/bin/env node + +var ronin = require('ronin') + +var cli = ronin(__dirname) + +cli.autoupdate(function () { + cli.run() +}) diff --git a/commands/add.js b/commands/add.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/cat.js b/commands/cat.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/commands.js b/commands/commands.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/daemon.js b/commands/daemon.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/dns.js b/commands/dns.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/get.js b/commands/get.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/id.js b/commands/id.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/init.js b/commands/init.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/ls.js b/commands/ls.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/mount.js b/commands/mount.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/ping.js b/commands/ping.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/refs.js b/commands/refs.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/resolve.js b/commands/resolve.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/update.js b/commands/update.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/commands/version.js b/commands/version.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package.json b/package.json new file mode 100644 index 0000000000..89a6df5a53 --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "js-ipfs", + "version": "0.0.0", + "description": "JavaScript implementation of the IPFS specification", + "bin": { + "jsipfs": "bin.js" + }, + "main": "src/index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "lint": "standard" + }, + "pre-commit": [ + "lint" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/ipfs/js-ipfs.git" + }, + "keywords": [ + "IPFS" + ], + "author": "David Dias ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ipfs/js-ipfs/issues" + }, + "homepage": "https://github.com/ipfs/js-ipfs#readme", + "devDependencies": { + "pre-commit": "^1.1.2", + "standard": "^5.3.1", + "tape": "^4.2.2" + }, + "dependencies": { + "ipfs-api": "^2.7.0", + "ronin": "^0.3.11" + } +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000000..49f9b07919 --- /dev/null +++ b/src/index.js @@ -0,0 +1,27 @@ +var ipfsAPIclt = require('ipfs-api') + +exports = module.exports = IPFS + +function IPFS () { + var self = this + + if (!(self instanceof IPFS)) { + throw new Error('Must be instantiated with new') + } + + var config = { + url: 'public-writable-node' + } + + if (process.env.NODE_ENV === 'dev') { + config.url = '/ip4/127.0.0.1/tcp/5001' + } + + if (process.env.NODE_ENV === 'test') { + config.url = process.env.APIURL + } + + var api = ipfsAPIclt(config.url) + + return api +} From fef5f17f5afbf9a4581b9ae28ef20dde9ef9b978 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 6 Nov 2015 15:36:58 +0000 Subject: [PATCH 03/16] base for commands --- bin.js | 0 commands/add.js | 7 +++++++ commands/cat.js | 7 +++++++ commands/commands.js | 7 +++++++ commands/daemon.js | 7 +++++++ commands/dns.js | 7 +++++++ commands/get.js | 7 +++++++ commands/id.js | 7 +++++++ commands/init.js | 7 +++++++ commands/ls.js | 7 +++++++ commands/mount.js | 7 +++++++ commands/ping.js | 7 +++++++ commands/refs.js | 7 +++++++ commands/resolve.js | 7 +++++++ commands/update.js | 7 +++++++ commands/version.js | 7 +++++++ 16 files changed, 105 insertions(+) mode change 100644 => 100755 bin.js diff --git a/bin.js b/bin.js old mode 100644 new mode 100755 diff --git a/commands/add.js b/commands/add.js index e69de29bb2..deedf71f28 100644 --- a/commands/add.js +++ b/commands/add.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/cat.js b/commands/cat.js index e69de29bb2..deedf71f28 100644 --- a/commands/cat.js +++ b/commands/cat.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/commands.js b/commands/commands.js index e69de29bb2..deedf71f28 100644 --- a/commands/commands.js +++ b/commands/commands.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/daemon.js b/commands/daemon.js index e69de29bb2..deedf71f28 100644 --- a/commands/daemon.js +++ b/commands/daemon.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/dns.js b/commands/dns.js index e69de29bb2..deedf71f28 100644 --- a/commands/dns.js +++ b/commands/dns.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/get.js b/commands/get.js index e69de29bb2..deedf71f28 100644 --- a/commands/get.js +++ b/commands/get.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/id.js b/commands/id.js index e69de29bb2..deedf71f28 100644 --- a/commands/id.js +++ b/commands/id.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/init.js b/commands/init.js index e69de29bb2..deedf71f28 100644 --- a/commands/init.js +++ b/commands/init.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/ls.js b/commands/ls.js index e69de29bb2..deedf71f28 100644 --- a/commands/ls.js +++ b/commands/ls.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/mount.js b/commands/mount.js index e69de29bb2..deedf71f28 100644 --- a/commands/mount.js +++ b/commands/mount.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/ping.js b/commands/ping.js index e69de29bb2..deedf71f28 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/refs.js b/commands/refs.js index e69de29bb2..deedf71f28 100644 --- a/commands/refs.js +++ b/commands/refs.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/resolve.js b/commands/resolve.js index e69de29bb2..deedf71f28 100644 --- a/commands/resolve.js +++ b/commands/resolve.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/update.js b/commands/update.js index e69de29bb2..deedf71f28 100644 --- a/commands/update.js +++ b/commands/update.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) diff --git a/commands/version.js b/commands/version.js index e69de29bb2..deedf71f28 100644 --- a/commands/version.js +++ b/commands/version.js @@ -0,0 +1,7 @@ +var Command = require('ronin').Command + +module.exports = Command.extend({ + desc: '', + + run: function (name) {} +}) From 78802187d669800751abe30280115e61885e6847 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 6 Nov 2015 16:12:08 +0000 Subject: [PATCH 04/16] help menu formmater --- commands/init.js | 28 ++++++++++++++++++++++++++-- src/help-menu.js | 14 ++++++++++++++ src/index.js | 6 +++++- 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 src/help-menu.js diff --git a/commands/init.js b/commands/init.js index deedf71f28..c669732925 100644 --- a/commands/init.js +++ b/commands/init.js @@ -1,7 +1,31 @@ var Command = require('ronin').Command +// var help = require('../src/help-menu.js') module.exports = Command.extend({ - desc: '', + desc: 'Initialize ipfs local configuration', - run: function (name) {} + // help: help, + + options: { + bits: { + type: 'number', + alias: 'b', + default: '2048', + desc: 'Number of bits to use in the generated RSA private key (defaults to 2048)' + }, + force: { + alias: 'f', + type: 'boolean', + desc: 'Overwrite existing config (if it exists)' + }, + 'empty-repo': { + alias: 'e', + type: 'boolean', + desc: 'Don\'t add and pin help files to the local storage' + } + }, + + run: function (name) { + console.log('NA - https://github.com/ipfs/js-ipfs/tree/jsipfs#getting-jsipfs-ready') + } }) diff --git a/src/help-menu.js b/src/help-menu.js new file mode 100644 index 0000000000..914865bb25 --- /dev/null +++ b/src/help-menu.js @@ -0,0 +1,14 @@ +module.exports = function help () { + var help = ['Usage: ' + this.programName + ' ' + this.name + ' [OPTIONS]'] + help.push('\n\nOPTIONS:\n\n') + var options = this.options + Object.keys(options).forEach(function (key) { + var line = ' ' + line = line + '-' + options[key].alias + ', --' + key + '\t' + line = line + options[key].type + '\t' + line = line + '- ' + options[key].desc + help.push(line + '\n') + }) + + return help +} diff --git a/src/index.js b/src/index.js index 49f9b07919..bf11c58245 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,5 @@ var ipfsAPIclt = require('ipfs-api') +var extend = require('extend') exports = module.exports = IPFS @@ -22,6 +23,9 @@ function IPFS () { } var api = ipfsAPIclt(config.url) + extend(self, api) - return api + self.init = function (bits, force, empty) { + throw new Error('Not available yet') + } } From 43712e7ec4b5a0681a86eda77cdf4f2ab96cbddd Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 6 Nov 2015 17:51:26 +0000 Subject: [PATCH 05/16] tests base with disposable daemon --- package.json | 6 ++++-- src/index.js | 1 + tests/jsipfs-test.js | 45 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 tests/jsipfs-test.js diff --git a/package.json b/package.json index 89a6df5a53..caebf3a1f8 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,9 @@ }, "main": "src/index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "lint": "standard" + "test:node": "node tests/jsipfs-test.js", + "lint": "standard", + "test": "npm run test:node" }, "pre-commit": [ "lint" @@ -27,6 +28,7 @@ }, "homepage": "https://github.com/ipfs/js-ipfs#readme", "devDependencies": { + "ipfsd-ctl": "^0.6.1", "pre-commit": "^1.1.2", "standard": "^5.3.1", "tape": "^4.2.2" diff --git a/src/index.js b/src/index.js index bf11c58245..146c877da7 100644 --- a/src/index.js +++ b/src/index.js @@ -22,6 +22,7 @@ function IPFS () { config.url = process.env.APIURL } + console.log(config) var api = ipfsAPIclt(config.url) extend(self, api) diff --git a/tests/jsipfs-test.js b/tests/jsipfs-test.js new file mode 100644 index 0000000000..10ea55686d --- /dev/null +++ b/tests/jsipfs-test.js @@ -0,0 +1,45 @@ +process.env.NODE_ENV = 'test' +var test = require('tape') +var ipfsd = require('ipfsd-ctl') +var IPFS = require('../src') + +var node +var daemon + +test('start disposable deamon', function (t) { + ipfsd.disposable(function (err, node) { + t.error(err) + t.ok(node) + daemon = node + + node.startDaemon(function (err) { + t.error(err) + console.log(node.apiAddr) + process.env.APIURL = node.apiAddr + t.end() + }) + }) +}) + +test('instatiate JS IPFS', function (t) { + node = new IPFS() + t.ok(node) + t.end() +}) + +// basic commands + +test('init', function (t) { + t.end() +}) + +test('close disposable daemon', function (t) { + var stopped + daemon.stopDaemon(function (err) { + if (!stopped) { + stopped = true + t.error(err) + t.end() + } + }) +}) From dac840e804911748fefd9e7cf91b2db2f7b766e3 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 6 Nov 2015 17:57:54 +0000 Subject: [PATCH 06/16] ipfs init --- src/index.js | 1 - tests/jsipfs-test.js | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 146c877da7..bf11c58245 100644 --- a/src/index.js +++ b/src/index.js @@ -22,7 +22,6 @@ function IPFS () { config.url = process.env.APIURL } - console.log(config) var api = ipfsAPIclt(config.url) extend(self, api) diff --git a/tests/jsipfs-test.js b/tests/jsipfs-test.js index 10ea55686d..27b54b7014 100644 --- a/tests/jsipfs-test.js +++ b/tests/jsipfs-test.js @@ -21,7 +21,7 @@ test('start disposable deamon', function (t) { }) }) -test('instatiate JS IPFS', function (t) { +test('create an JS IPFS node', function (t) { node = new IPFS() t.ok(node) t.end() @@ -30,6 +30,7 @@ test('instatiate JS IPFS', function (t) { // basic commands test('init', function (t) { + t.throws(node.init) t.end() }) From 932b5cecec77819e70e4fbd9a3d10bc3eb87b012 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 6 Nov 2015 20:57:34 +0000 Subject: [PATCH 07/16] add --- package.json | 3 +- tests/jsipfs-test.js | 636 ++++++++++++++++++++++++++++++ tests/test-folder/add.js | 22 ++ tests/test-folder/cat.js | 18 + tests/test-folder/files/hello.txt | 1 + tests/test-folder/files/ipfs.txt | 1 + tests/test-folder/ipfs-add.js | 12 + tests/test-folder/ls.js | 18 + tests/test-folder/version.js | 8 + tests/testconfig.json | 71 ++++ tests/testfile.txt | 1 + 11 files changed, 790 insertions(+), 1 deletion(-) create mode 100644 tests/test-folder/add.js create mode 100644 tests/test-folder/cat.js create mode 100644 tests/test-folder/files/hello.txt create mode 100644 tests/test-folder/files/ipfs.txt create mode 100755 tests/test-folder/ipfs-add.js create mode 100644 tests/test-folder/ls.js create mode 100644 tests/test-folder/version.js create mode 100644 tests/testconfig.json create mode 100644 tests/testfile.txt diff --git a/package.json b/package.json index caebf3a1f8..ff152556f9 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ }, "dependencies": { "ipfs-api": "^2.7.0", - "ronin": "^0.3.11" + "ronin": "^0.3.11", + "vinyl": "^0.5.1" } } diff --git a/tests/jsipfs-test.js b/tests/jsipfs-test.js index 27b54b7014..af38d0101a 100644 --- a/tests/jsipfs-test.js +++ b/tests/jsipfs-test.js @@ -2,6 +2,12 @@ process.env.NODE_ENV = 'test' var test = require('tape') var ipfsd = require('ipfsd-ctl') var IPFS = require('../src') +var fs = require('fs') +var path = require('path') +var File = require('vinyl') + +var testfilePath = __dirname + '/testfile.txt' +var testfile = fs.readFileSync(__dirname + '/testfile.txt') var node var daemon @@ -34,6 +40,636 @@ test('init', function (t) { t.end() }) +test('add file', {timeout: 10000}, function (t) { + var file = new File({ + cwd: path.dirname(testfilePath), + base: path.dirname(testfilePath), + path: testfilePath, + contents: new Buffer(testfile) + }) + + node.add(file, function (err, res) { + t.error(err) + + var added = res[0] !== null ? res[0] : res + t.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') + t.equal(added.Name, path.basename(testfilePath)) + t.end() + }) +}) + +test('add buffer', {timeout: 10000}, function (t) { + var buf = new Buffer(testfile) + node.add(buf, function (err, res) { + t.error(err) + + var added = res[0] !== null ? res[0] : res + t.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') + t.end() + }) +}) + +test('add path', {timeout: 10000}, function (t) { + node.add(testfilePath, function (err, res) { + t.error(err) + + var added = res[0] !== null ? res[0] : res + t.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') + t.end() + }) +}) + +test('add a nested dir', {timeout: 10000}, function (t) { + node.add(__dirname + '/test-folder', { recursive: true }, function (err, res) { + t.error(err) + + var added = res[res.length - 1] + t.equal(added.Hash, 'QmZdsefMGMeG6bL719gX44XSVQrL6psEgRZdw1SGadFaK2') + t.end() + }) +}) + +/* +describe('.cat', function () { + it('cat', function (done) { + this.timeout(10000) + + apiClients['a'].cat('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', function (err, res) { + if (err) { + throw err + } + + if (typeof res === 'string') { + // Just a string + assert.equal(res, testfile) + done() + return + } + + var buf = '' + res + .on('error', function (err) { throw err }) + .on('data', function (data) { buf += data }) + .on('end', function () { + assert.equal(buf, testfile) + done() + }) + }) + }) +}) + +describe('.ls', function () { + var folder = 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q' + it('ls', function (done) { + if (!isNode) { + return done() + } + + this.timeout(100000) + + apiClients['a'].ls(folder, function (err, res) { + if (err) { + throw err + } + + var objs = { + Hash: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q', + Links: [{ + Name: 'add.js', + Hash: 'QmaeuuKLHzirbVoTjb3659fyyV381amjaGrU2pecHEWPrN', + Size: 481, + Type: 2 + }, { + Name: 'cat.js', + Hash: 'QmTQhTtDWeaaP9pttDd1CuoVTLQm1w51ABfjgmGUbCUF6i', + Size: 364, + Type: 2 + }, { + Name: 'files', + Hash: 'QmTYFLz5vsdMpq4XXw1a1pSxujJc9Z5V3Aw1Qg64d849Zy', + Size: 132, + Type: 1 + }, { + Name: 'ipfs-add.js', + Hash: 'QmTjXxUemcuMAZ2KNN3iJGWHwrkMsW8SWEwkYVSBi1nFD9', + Size: 315, + Type: 2 + }, { + Name: 'ls.js', + Hash: 'QmXYUXDFNNh1wgwtX5QDG7MsuhAAcE9NzDYnz8SjnhvQrK', + Size: 428, + Type: 2 + }, { + Name: 'version.js', + Hash: 'QmUmDmH4hZgN5THnVP1VjJ1YWh5kWuhLGUihch8nFiD9iy', + Size: 153, + Type: 2 }] + } + + assert.deepEqual(res.Objects[0], objs) + done() + }) + }) +}) + +if (isNode) { + describe('.refs', function () { + var folder = 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q' + + it('refs', function (done) { + if (!isNode) { + return done() + } + + this.timeout(10000) + apiClients['a'].refs(folder, {'format': ' '}, function (err, objs) { + if (err) { + throw err + } + + var result = [{ + Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmaeuuKLHzirbVoTjb3659fyyV381amjaGrU2pecHEWPrN add.js', + Err: '' }, + { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmTQhTtDWeaaP9pttDd1CuoVTLQm1w51ABfjgmGUbCUF6i cat.js', + Err: '' }, + { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmTYFLz5vsdMpq4XXw1a1pSxujJc9Z5V3Aw1Qg64d849Zy files', + Err: '' }, + { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmTjXxUemcuMAZ2KNN3iJGWHwrkMsW8SWEwkYVSBi1nFD9 ipfs-add.js', + Err: '' }, + { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmXYUXDFNNh1wgwtX5QDG7MsuhAAcE9NzDYnz8SjnhvQrK ls.js', + Err: '' }, + { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmUmDmH4hZgN5THnVP1VjJ1YWh5kWuhLGUihch8nFiD9iy version.js', + Err: '' } ] + + assert.deepEqual(objs, result) + + done() + }) + }) + }) +} +*/ + +// data structure commands + +/* +describe('.block', function () { + var blorbKey = 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ' + var blorb = Buffer('blorb') + + it('block.put', function (done) { + this.timeout(10000) + + apiClients['a'].block.put(blorb, function (err, res) { + if (err) throw err + var store = res.Key + assert.equal(store, 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ') + done() + }) + }) + + it('block.get', function (done) { + this.timeout(10000) + + apiClients['a'].block.get(blorbKey, function (err, res) { + if (err) throw err + + if (typeof res === 'string') { + // Just a string + assert.equal(res, 'blorb') + done() + return + } + + var buf = '' + res + .on('data', function (data) { buf += data }) + .on('end', function () { + assert.equal(buf, 'blorb') + done() + }) + }) + }) +}) + +describe('.object', function () { + var testObject = Buffer(JSON.stringify({Data: 'testdata', Links: []})) + var testObjectHash = 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD' + var testPatchObject = Buffer(JSON.stringify({Data: 'new test data'})) + var testPatchObjectHash = 'QmWJDtdQWQSajQPx1UVAGWKaSGrHVWdjnrNhbooHP7LuF2' + + it('object.put', function (done) { + apiClients['a'].object.put(testObject, 'json', function (err, res) { + if (err) throw err + var obj = res + assert.equal(obj.Hash, testObjectHash) + assert.equal(obj.Links.length, 0) + done() + }) + }) + + it('object.get', function (done) { + apiClients['a'].object.get(testObjectHash, function (err, res) { + if (err) { + throw err + } + var obj = res + assert.equal(obj.Data, 'testdata') + assert.equal(obj.Links.length, 0) + done() + }) + }) + + it('object.data', function (done) { + this.timeout(10000) + apiClients['a'].object.data(testObjectHash, function (err, res) { + if (err) throw err + + if (typeof res === 'string') { + // Just a string + assert.equal(res, 'testdata') + done() + return + } + + var buf = '' + res + .on('error', function (err) { throw err }) + .on('data', function (data) { buf += data }) + .on('end', function () { + assert.equal(buf, 'testdata') + done() + }) + }) + }) + + it('object.stat', function (done) { + this.timeout(10000) + apiClients['a'].object.stat(testObjectHash, function (err, res) { + if (err) { + throw err + } + assert.deepEqual(res, { + Hash: 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD', + NumLinks: 0, + BlockSize: 10, + LinksSize: 2, + DataSize: 8, + CumulativeSize: 10 + }) + done() + }) + }) + + it('object.links', function (done) { + this.timeout(10000) + apiClients['a'].object.links(testObjectHash, function (err, res) { + if (err) { + throw err + } + + assert.deepEqual(res, { + Hash: 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD', + Links: [] + }) + done() + }) + }) + + it('object.patch', function (done) { + this.timeout(10000) + apiClients['a'].object.put(testPatchObject, 'json', function (err, res) { + if (err) { + throw err + } + apiClients['a'].object.patch(testObjectHash, ['add-link', 'next', testPatchObjectHash], function (err, res) { + if (err) { + throw err + } + var o = JSON.parse(res) + assert.deepEqual(o, { + Hash: 'QmZFdJ3CQsY4kkyQtjoUo8oAzsEs5BNguxBhp8sjQMpgkd', + Links: null + }) + apiClients['a'].object.get(o.Hash, function (err, res) { + if (err) { + throw err + } + assert.deepEqual(JSON.parse(res), { + Data: 'testdata', + Links: [{ + Name: 'next', + Hash: 'QmWJDtdQWQSajQPx1UVAGWKaSGrHVWdjnrNhbooHP7LuF2', + Size: 15 + }] + }) + done() + }) + }) + }) + }) +}) +*/ + +// advanced commands + +/* +describe('.mount', function () { + // requires FUSE to be installed, not practical for testing +}) + +describe('.diag', function () { + it('.diag.net', function (done) { + this.timeout(1000000) + apiClients['a'].diag.net(function (err, res) { + if (err) { + throw err + } + assert(res) + done() + }) + }) +}) + +describe('.name', function () { + var name + it('.name.publish', function (done) { + apiClients['a'].name.publish('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', function (err, res) { + if (err) { + throw err + } + assert(res) + name = res + done() + }) + }) + it('.name.resolve', function (done) { + apiClients['a'].name.resolve(name.Name, function (err, res) { + if (err) { + throw err + } + + assert(res) + assert.deepEqual(res, { Path: '/ipfs/' + name.Value }) + done() + }) + }) +}) + +describe('.pin', function () { + it('.pin.add', function (done) { + this.timeout(5000) + + apiClients['b'].pin.add('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', {recursive: false}, function (err, res) { + if (err) { + throw err + } + assert.equal(res.Pinned[0], 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') + done() + }) + }) + + it('.pin.list', function (done) { + this.timeout(5000) + + apiClients['b'].pin.list(function (err, res) { + if (err) { + throw err + } + assert(res) + done() + }) + }) + + it('.pin.remove', function (done) { + this.timeout(5000) + + apiClients['b'].pin.remove('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', {recursive: false}, function (err, res) { + if (err) { + throw err + } + assert(res) + apiClients['b'].pin.list('direct', function (err, res) { + if (err) { + throw err + } + assert(res) + assert.equal(Object.keys(res.Keys).length, 0) + done() + }) + }) + }) +}) +*/ + +// network commands + +/* +describe('.swarm', function () { + it('.swarm.peers', function (done) { + this.timeout(5000) + + apiClients['a'].swarm.peers(function (err, res) { + if (err) { + throw err + } + + assert(res.Strings.length >= 2) + done() + }) + }) + it('.swarm.connect', function (done) { + // Done in the 'before' segment + done() + }) +}) + +if (isNode) { + // Ping returns streaming json in the browser + // which breaks the parser atm. See https://github.com/ipfs/node-ipfs-api/issues/86 + describe('.ping', function () { + it('ping another peer', function (done) { + apiClients['b'].id(function (err, id) { + if (err) { + throw err + } + + apiClients['a'].ping(id.ID, function (err, res) { + if (err) { + throw err + } + assert(res) + assert(res.Success) + done() + }) + }) + }) + }) +} + +describe('.id', function () { + it('id', function (done) { + this.timeout(10000) + apiClients['a'].id(function (err, res) { + if (err) throw err + var id = res + assert(id.ID) + assert(id.PublicKey) + done() + }) + }) +}) + +describe('.dht', function () { + it('returns an error when getting a non-existent key from the DHT', + function (done) { + this.timeout(20000) + apiClients['a'].dht.get('non-existent', {timeout: '100ms'}, function (err, value) { + assert(err) + done() + }) + }) + + it('puts and gets a key value pair in the DHT', function (done) { + this.timeout(20000) + + apiClients['a'].dht.put('scope', 'interplanetary', function (err, res) { + if (err) { + throw err + } + + return done() + + // non ipns or pk hashes fail to fetch, known bug + // bug: https://github.com/ipfs/go-ipfs/issues/1923#issuecomment-152932234 + // apiClients['a'].dht.get('scope', function (err, value) { + // console.log('->>', err, value) + // if (err) { + // throw err + // } + // assert.equal(value, 'interplanetary') + // done() + // }) + }) + }) + + it('.dht.findprovs', function (done) { + apiClients['a'].dht.findprovs('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', function (err, res) { + if (err) { + throw err + } + assert(res) + done() + }) + }) +}) +*/ + +// tool commands + +/* +describe('.config', function () { + it('.config.{set, get}', function (done) { + this.timeout(10000) + + var confKey = 'arbitraryKey' + var confVal = 'arbitraryVal' + + apiClients['a'].config.set(confKey, confVal, function (err, res) { + if (err) throw err + apiClients['a'].config.get(confKey, function (err, res) { + if (err) throw err + assert.equal(res.Value, confVal) + done() + }) + }) + }) + + it('.config.show', function (done) { + this.timeout(10000) + + apiClients['c'].config.show(function (err, res) { + if (err) { + throw err + } + assert(res) + done() + }) + }) + + it('.config.replace', function (done) { + this.timeout(10000) + + if (!isNode) { + return done() + } + + apiClients['c'].config.replace(__dirname + '/r-config.json', function (err, res) { + if (err) { + throw err + } + + assert.equal(res, '') + done() + }) + }) +}) + +describe('.update (currently disabled, wait for IPFS 0.4.0 release', function () { + it('.update.apply') + it('.update.check') + it('.update.log') +}) + +describe('.version', function () { + it('checks the version', function (done) { + this.timeout(10000) + apiClients['a'].version(function (err, res) { + if (err) { + throw err + } + assert(res) + assert(res.Version) + console.log(' - running against version', res.Version) + done() + }) + }) +}) + +describe('.commands', function () { + it('lists commands', function (done) { + this.timeout(10000) + apiClients['a'].commands(function (err, res) { + if (err) { + throw err + } + assert(res) + done() + }) + }) +}) +*/ + +// other + +/* +describe('.log', function () { + // TODO news 0.3.9 ndjson stuff + it.skip('.log.tail', function (done) { + apiClients['a'].log.tail(function (err, res) { + if (err) { + throw err + } + + console.log('->', res) + done() + }) + }) +}) +*/ + +// ending + test('close disposable daemon', function (t) { var stopped daemon.stopDaemon(function (err) { diff --git a/tests/test-folder/add.js b/tests/test-folder/add.js new file mode 100644 index 0000000000..be3fdedd48 --- /dev/null +++ b/tests/test-folder/add.js @@ -0,0 +1,22 @@ +'use strict' + +var ipfs = require('../src')('localhost', 5001) + +var f1 = 'Hello' +var f2 = 'World' + +ipfs.add([new Buffer(f1), new Buffer(f2)], function (err, res) { + if (err || !res) return console.log(err) + + for (var i = 0; i < res.length; i++) { + console.log(res[i]) + } +}) + +ipfs.add(['./files/hello.txt', './files/ipfs.txt'], function (err, res) { + if (err || !res) return console.log(err) + + for (var i = 0; i < res.length; i++) { + console.log(res[i]) + } +}) diff --git a/tests/test-folder/cat.js b/tests/test-folder/cat.js new file mode 100644 index 0000000000..d24aa5a2de --- /dev/null +++ b/tests/test-folder/cat.js @@ -0,0 +1,18 @@ +'use strict' + +var ipfs = require('../src')('localhost', 5001) + +var hash = [ + 'QmdFyxZXsFiP4csgfM5uPu99AvFiKH62CSPDw5TP92nr7w', + 'QmY9cxiHqTFoWamkQVkpmmqzBrY3hCBEL2XNu3NtX74Fuu' +] + +ipfs.cat(hash, function (err, res) { + if (err || !res) return console.log(err) + + if (res.readable) { + res.pipe(process.stdout) + } else { + console.log(res) + } +}) diff --git a/tests/test-folder/files/hello.txt b/tests/test-folder/files/hello.txt new file mode 100644 index 0000000000..e965047ad7 --- /dev/null +++ b/tests/test-folder/files/hello.txt @@ -0,0 +1 @@ +Hello diff --git a/tests/test-folder/files/ipfs.txt b/tests/test-folder/files/ipfs.txt new file mode 100644 index 0000000000..95a3116521 --- /dev/null +++ b/tests/test-folder/files/ipfs.txt @@ -0,0 +1 @@ +IPFS diff --git a/tests/test-folder/ipfs-add.js b/tests/test-folder/ipfs-add.js new file mode 100755 index 0000000000..572791db2b --- /dev/null +++ b/tests/test-folder/ipfs-add.js @@ -0,0 +1,12 @@ +#!/usr/bin/env node + +var ipfs = require('../src')('localhost', 5001) +var files = process.argv.slice(2) + +ipfs.add(files, {recursive: true}, function (err, res) { + if (err || !res) return console.log(err) + + for (var i = 0; i < res.length; i++) { + console.log('added', res[i].Hash, res[i].Name) + } +}) diff --git a/tests/test-folder/ls.js b/tests/test-folder/ls.js new file mode 100644 index 0000000000..6006e8696e --- /dev/null +++ b/tests/test-folder/ls.js @@ -0,0 +1,18 @@ +'use strict' + +var ipfs = require('../src')('localhost', 5001) + +var hash = ['QmdbHK6gMiecyjjSoPnfJg6iKMF7v6E2NkoBgGpmyCoevh'] + +ipfs.ls(hash, function (err, res) { + if (err || !res) return console.log(err) + + res.Objects.forEach(function (node) { + console.log(node.Hash) + + console.log('Links [%d]', node.Links.length) + node.Links.forEach(function (link, i) { + console.log('[%d]', i, link) + }) + }) +}) diff --git a/tests/test-folder/version.js b/tests/test-folder/version.js new file mode 100644 index 0000000000..c695985250 --- /dev/null +++ b/tests/test-folder/version.js @@ -0,0 +1,8 @@ +'use strict' + +var ipfs = require('../src')('localhost', 5001) + +ipfs.commands(function (err, res) { + if (err) throw err + console.log(res) +}) diff --git a/tests/testconfig.json b/tests/testconfig.json new file mode 100644 index 0000000000..7ad668e1dd --- /dev/null +++ b/tests/testconfig.json @@ -0,0 +1,71 @@ +{ + "test": "beep boop", + "Addresses": { + "API": "/ip4/127.0.0.1/tcp/5001", + "Gateway": "/ip4/127.0.0.1/tcp/8080", + "Swarm": [ + "/ip4/0.0.0.0/tcp/4001" + ] + }, + "Bootstrap": [ + "/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", + "/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z", + "/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLpPVmHKQ4XTPdz8tjDFgdeRFkpV8JgYq8JVJ69RrZm", + "/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm", + "/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu", + "/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64", + "/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd", + "/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3", + "/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx" + ], + "Datastore": { + "Path": "/home/krl/.ipfs/datastore", + "Type": "leveldb" + }, + "Discovery": { + "MDNS": { + "Enabled": false, + "Interval": 0 + } + }, + "Gateway": { + "RootRedirect": "", + "Writable": false + }, + "Identity": { + "PeerID": "QmTF1MqD5hFgRztwxeosess2S1PpSm6fpy2jt15gZjr39c", + "PrivKey": "CAASqxIwggknAgEAAoICAQC8RXr0/XtKFAn5ReHm0AoUQYpMxckyISsdKkDiGTXQW6h3IuU7kypoeSUNPerp+/+dJCXe5dY+GnT9jRXbZBUfVWYuEnMbCCnGHhi28wD71TYgfLuJlZjRKy1eBIz57bOtAVY8CnLM4WPLQLhcwgSZ1G83D6sRTKNOOqZMf37V/I1dxDg2kqi0JujBodlIP0WjDyBJvtPfLUSoytYznIOmJfi/K5ofPm54y5zX81lwuRGAdCXDIwCwcIwFY2EC6gWVECDLTTBnr7ZXITNtTBOWx6tIEmTF8K/hQN3KzazVEkYn7p4r0QL4zJnQCBIr09HhvOuNTK9XdqBeQJsVVm2uM+//acgdlYS8V+F8FQQHCihsaKAEYeDSGuKuzEbLohc8donWy+3k5jn/SwY8jJLaXtBJpux1sGdRG+ko5mFdXViII5e8gbiSdC1JiDKdeYmUSAm27IvuGay4FplK8wczZrComdsS3sxpSvTrS6KulNv7WTZEKPAWtMFGX+58krOpDgOkKg8IvwucmXsrYD5Q+razorP3v4QAVhouhxQNKzVpmOYZemOeJrTf5smUBjTGLIp343N36kWqZVp+bqTjl8x5uRbgn/wthDWHsyV81M6OwCCPtiKLJMKkztlArFnnT5sZ3aG7sFj4AgnxcqHHDo4nUAI+t4tOb9WxcAMR2wIDAQABAoICAG7OxetjNSkIWkZoJujeENCTMn60+hGTC/kCYWWxSMb061YTJ6/EkfUjN/dvNc+5DVzDZbamt02d7LU+UFrrsLLcZGNBYJXMXCnKlOk4ZJ/TgSPlxcrYTTTuoKjxLLf8ev+cBdEYpTCIh1+dG+UcG/Ed4scZZams3YCxbCch8tim590EG8Gi18AQFnXAeE3ZT3cE9A/zTGfSENL3btK5j5I+TwTU+MTizcoyrIE9LKr3gaGEuqT6+PDfjMmvD+3TJq3w7Bw7tf2QoVTuqYHugKkBo4Grsbv+SMXek6tFGi/drYTbICTRw1oDsZOK7Ib3CFRACLMFKz3jB8fxZlVMpQgawiyeBPx0Z4xf6+OG0yUGxGUKBcuATzON29NJWplZxPtfClCozdsm/3VCCPe7ruDUoDEWobhvKh3Ax+8Cdvt9ajoon6qNK3QgJqrm8Xc50MtjaPhZASGw1YweOfxAeQRHVYAJHrkBwblNzOnCMT8F4uKpeI4C9rUjKTOJu53qV1shwIM+zUGtmRvJUTKA15twqnntQrkhO990Dtl3tON/yx/D2ilLYCVuEPqfmW5/xiOrabgS1OlXLZ7teat85JOyqgZ1R/uxFzQljRwVsnCG6DlobkGHbnKwHq4zyV5UXZUDTM1QAgw6ksmkDWOQ9iYJrTk7UTmnNeAb0g4G2tJhAoIBAQDyT8qoPmZkONFktdnUUnjAeuNZ55b2u7pBq+1b2N4ZzhZQjCRCJwK3zxDYpoxWmH9etJcvv1RvZRaWngr9vECMzUEJmklZlCpW2fdxhvprABHaywklFt2heOo8krmfvbZIVMQ6Q9xWRz5sfiV+k3C8q2Y6RIMLuGquYzk8o2pAPG5aD7gHxIeq4JRGCXyJyovgX2AOZmtZe9ttc+dhxKm71V8bI0e88JrusKeapUnVJUm8qgP6PBg+F8MZh1U3kjHczKeB1ND3X9oFQtLP9ypsi4Ngqgvw0O3+CGY/nvJ6c6ynryiVcmURdQY66f+57CtPjjdUVsSoR/bce5S2lrHNAoIBAQDG6C5iHVuX9OplWcA70U7Tc4eiac803QRUL+zdDOC74Qw2Coxr5Nsxjz8/i+6DnOCeWkJBh/uGEaxdYYZHU90LVf/NSA3zguGt6Z0g3MMvMNT9KGgoZl2T5Y/CCgCfrt6gTGRy7PmF+uLtgHcsKQLqCzMarOSVyue35ztxuI6NeRPvlNkoJ54F/+jnY1/6MrMTPXpybHXwf40piyLPuyapqBgyWkRBwPORR9Ucdiz7KhBnZhj7NYpwvut/KgufuU3WF9bkknfFlOJzVp8ZgefxHE8lHPuR0PnWyHwv3v5hgALYwenREcM5MUbRZ7tc18FkWBVOPlvszqSGujq3nMpHAoIBAGV2R9OfHVzF9dgH1Yh0aB+g1WYl9S6neNxa027sJkQD6ZAcvmn8z8SLrfAp/QWdoWfUkqHpqb9jQswarVuF4jmTELKmqiQaSIhJiLU+4cjAJLnK3q9rHa6pZNusTJG47ITpCamkFLUD6/2d7LFNp5043/tyCLV1qSYQYj0j6C+xnjuT7WlDP9OrairRehZwe5WeGiitdjHoDP+N0ss7gB8ov0Qrx7Qzw4xC6Et2/q2DiZa4UiYL19LYPFeKNYKpcruT7mgM5ttOhYpCaueuBVOiL4bgbVOPCLigZ8AoHDxuB1PHomTBm9RtfghZRz1gyNntIPntwzb7u0Cjdqfl/dkCggEAauDxo3jg8ZsBpCoA2GOUtpw6gnPWijJElDQYU4MK8wlvNU6fu44ClfPB6ZR4OjI+o/gd5/Z4mca/VoID1Cnk+aVhSV3xWSq3t2pzKuhU3POhTtK6fRLcL49Hmt0jDqq5J2tFAlgBkBOKglHoN0tmLHqOIERMo4yezDusvmOL/crUgoT51tDK4bBr5oGIXfmGLc14ESnkibEQGgWQVAzdLoaLUesdCDP07NirU5rQerlUjSrYO4u+cuyzv+XIzy+T+nle1/037Gwe7hjabqtWBUHP6UJUjzq6NMYPrO1mxN8zKGOyDsw7mWy3/+d8TtwEJ7YI5L0vSeSTlW1WBblzGwKCAQBeL4WoC0rH7B+MBw/+q3NMozlq4pE1vAC/7L06GhTPQi3Sklz/HHfw1g2aeYYIYpZ3S0Q+QHBs+fpspuPIBE0xTZPNJIAPTOW3WxODCya1rl521Syy8t57m9UPyVG3scSbWrJxH99BQVSPZzVMI3WO2XWGYupUIkVo+MW4WKhBkHd6a8inuJmjExDWm+bwaoQgUxNwE3c1C5OFwkAU1ofhNijE02IJX0EOaYjvNELT0Na3B0T7KZ72Ut4u33byPgEHa9SsPEurctbHy2HdpOGHdpxx4r+7ZQUtg1UZ0ZRQN8B8TyozD05AXQ9V8ybdzU1jSpQYWqbfkXl+LllJBa4E" + }, + "Log": { + "MaxAgeDays": 0, + "MaxBackups": 1, + "MaxSizeMB": 250 + }, + "Mounts": { + "FuseAllowOther": false, + "IPFS": "/ipfs", + "IPNS": "/ipns" + }, + "SupernodeRouting": { + "Servers": [ + "/ip4/104.236.176.52/tcp/4002/ipfs/QmXdb7tWTxdFEQEFgWBqkuYSrZd3mXrC7HxkD4krGNYx2U", + "/ip4/104.236.179.241/tcp/4002/ipfs/QmVRqViDByUxjUMoPnjurjKvZhaEMFDtK35FJXHAM4Lkj6", + "/ip4/104.236.151.122/tcp/4002/ipfs/QmSZwGx8Tn8tmcM4PtDJaMeUQNRhNFdBLVGPzRiNaRJtFH", + "/ip4/162.243.248.213/tcp/4002/ipfs/QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP", + "/ip4/128.199.219.111/tcp/4002/ipfs/Qmb3brdCYmKG1ycwqCbo6LUwWxTuo3FisnJV2yir7oN92R", + "/ip4/104.236.76.40/tcp/4002/ipfs/QmdRBCV8Cz2dGhoKLkD3YjPwVFECmqADQkx5ZteF2c6Fy4", + "/ip4/178.62.158.247/tcp/4002/ipfs/QmUdiMPci7YoEUBkyFZAh2pAbjqcPr7LezyiPD2artLw3v", + "/ip4/178.62.61.185/tcp/4002/ipfs/QmVw6fGNqBixZE4bewRLT2VXX7fAHUHs8JyidDiJ1P7RUN" + ] + }, + "Tour": { + "Last": "" + }, + "Version": { + "AutoUpdate": "minor", + "Check": "error", + "CheckDate": "0001-01-01T00:00:00Z", + "CheckPeriod": "172800000000000", + "Current": "0.3.0" + } +} diff --git a/tests/testfile.txt b/tests/testfile.txt new file mode 100644 index 0000000000..84b31025b1 --- /dev/null +++ b/tests/testfile.txt @@ -0,0 +1 @@ +Plz add me! From da015c85678e2e2afe336d48e0e64349eef2bdbd Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 27 Nov 2015 22:05:48 +0000 Subject: [PATCH 08/16] remove current tests to start again --- graphs/arch.monopic | Bin 0 -> 1441 bytes graphs/arch.txt | 9 + tests/jsipfs-test.js | 682 ------------------------------ tests/test-folder/add.js | 22 - tests/test-folder/cat.js | 18 - tests/test-folder/files/hello.txt | 1 - tests/test-folder/files/ipfs.txt | 1 - tests/test-folder/ipfs-add.js | 12 - tests/test-folder/ls.js | 18 - tests/test-folder/version.js | 8 - tests/testconfig.json | 71 ---- tests/testfile.txt | 1 - 12 files changed, 9 insertions(+), 834 deletions(-) create mode 100644 graphs/arch.monopic create mode 100644 graphs/arch.txt delete mode 100644 tests/jsipfs-test.js delete mode 100644 tests/test-folder/add.js delete mode 100644 tests/test-folder/cat.js delete mode 100644 tests/test-folder/files/hello.txt delete mode 100644 tests/test-folder/files/ipfs.txt delete mode 100755 tests/test-folder/ipfs-add.js delete mode 100644 tests/test-folder/ls.js delete mode 100644 tests/test-folder/version.js delete mode 100644 tests/testconfig.json delete mode 100644 tests/testfile.txt diff --git a/graphs/arch.monopic b/graphs/arch.monopic new file mode 100644 index 0000000000000000000000000000000000000000..5dae163b8d6f5aa211b1c951ea04d3d33692836b GIT binary patch literal 1441 zcmV;S1z!69O;1iwP)S1pABzY8000000t4k*TW_OA6#gsGJQImCGhoQuYNe_xt*WZs zw<@x*8QXL*q=2)VM*i=eE9ROSlZll0fs2RXn{%IY4t_@Y>TkBLN_6)uZf~);Nt28% z!5=?=lpzh&@PE%meteCT@>d(dZ1af zXG<0*RbyQ_6o5PC=1u6TURM z#lCY(5q~$@O4`J7eEch)eh!%A_d=iHwJQYAn4(L-ZJ zPw=26n{PHHtM~)g5%f!uC;^drP9ktP$4}^v)`J|CrTjf~BC$mt5mc?KU6CKQyIM(6 zRYmKaU{LXQR6O{?8diA`vqAwct3qK{>}R!%(qx;7C8RdS6fI^ZoX(ilvg?uBUEgW1 zy3(r_+`yx3dq|^VsU}F)H-)gfC|mFHq9IQrRMEmoONG-h{=VWn<}P?pZ?2;C_brzl z*LrQQJ!v*3b*#o%Zf*V89aFhts!aYBCcbb88Z@R6M>M*qF>e7&)Rs63EsnN^^`LgH zKa|K*pB-q>#b3@II zCmcbq-j0xi0kAEjv?VwdH&0~N!3Z8p+9#zGJnC)$ssaA)UUv#7QA_+O%u{p`ApKiy&}3WH9jmVhCy)^nure#SNuz z(rC*W1p`edLx*QVW3UDdGRmH&215bK==51BPrIFp0a~40)G{a>H7;@O;9_El-sy&c z&()r14H^P_R4*n&`)5K^u%tt3jbt3oAsKz)Pk-mfFZ}qEA2QT|iy1x)60y0H6>+L4d%hg-E4?HFq`>%f;Lm zg)5U8vuP;Gv=Yf`b-5>Ex(H>+8(DNK2;>YUtH=YjerxRRRH zeZ`v9yRc^UsN^s8*F^?OC#2HL5|jAyO+D}VY; zAEN2^NngKAXz2A@c{O#gxGbe4`1Bcsz{P1PHzOk^dKrk{_#T6OYu{sN`wK)k(lX%a z3intCGFuekz}jaVI@*Q_X19)rXYcEiK#tM}o|p(EFu}cK|17h^e#HvuVZM9>azEmX z(qjW&V=q8hJ+TYm(D7asuy^J z>cyQ>z0lw?-y-&czCYG8CbQiOMxfs$e0s{)`?)Ts!^;tZpD7Tq^(o?3l(q literal 0 HcmV?d00001 diff --git a/graphs/arch.txt b/graphs/arch.txt new file mode 100644 index 0000000000..29871aa032 --- /dev/null +++ b/graphs/arch.txt @@ -0,0 +1,9 @@ +┌───┐ ┌───────────────┐ ┌──────────────┐ +│CLI│───▶│ HTTP API ├───▶│IPFS Node Impl│ +└───┘ └───────────────┘ └──────────────┘ + △ △ + └──────────┬─────────┘ + │ + ┌─────┐ + │Tests│ + └─────┘ \ No newline at end of file diff --git a/tests/jsipfs-test.js b/tests/jsipfs-test.js deleted file mode 100644 index af38d0101a..0000000000 --- a/tests/jsipfs-test.js +++ /dev/null @@ -1,682 +0,0 @@ -process.env.NODE_ENV = 'test' -var test = require('tape') -var ipfsd = require('ipfsd-ctl') -var IPFS = require('../src') -var fs = require('fs') -var path = require('path') -var File = require('vinyl') - -var testfilePath = __dirname + '/testfile.txt' -var testfile = fs.readFileSync(__dirname + '/testfile.txt') - -var node -var daemon - -test('start disposable deamon', function (t) { - ipfsd.disposable(function (err, node) { - t.error(err) - t.ok(node) - daemon = node - - node.startDaemon(function (err) { - t.error(err) - console.log(node.apiAddr) - process.env.APIURL = node.apiAddr - t.end() - }) - }) -}) - -test('create an JS IPFS node', function (t) { - node = new IPFS() - t.ok(node) - t.end() -}) - -// basic commands - -test('init', function (t) { - t.throws(node.init) - t.end() -}) - -test('add file', {timeout: 10000}, function (t) { - var file = new File({ - cwd: path.dirname(testfilePath), - base: path.dirname(testfilePath), - path: testfilePath, - contents: new Buffer(testfile) - }) - - node.add(file, function (err, res) { - t.error(err) - - var added = res[0] !== null ? res[0] : res - t.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') - t.equal(added.Name, path.basename(testfilePath)) - t.end() - }) -}) - -test('add buffer', {timeout: 10000}, function (t) { - var buf = new Buffer(testfile) - node.add(buf, function (err, res) { - t.error(err) - - var added = res[0] !== null ? res[0] : res - t.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') - t.end() - }) -}) - -test('add path', {timeout: 10000}, function (t) { - node.add(testfilePath, function (err, res) { - t.error(err) - - var added = res[0] !== null ? res[0] : res - t.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') - t.end() - }) -}) - -test('add a nested dir', {timeout: 10000}, function (t) { - node.add(__dirname + '/test-folder', { recursive: true }, function (err, res) { - t.error(err) - - var added = res[res.length - 1] - t.equal(added.Hash, 'QmZdsefMGMeG6bL719gX44XSVQrL6psEgRZdw1SGadFaK2') - t.end() - }) -}) - -/* -describe('.cat', function () { - it('cat', function (done) { - this.timeout(10000) - - apiClients['a'].cat('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', function (err, res) { - if (err) { - throw err - } - - if (typeof res === 'string') { - // Just a string - assert.equal(res, testfile) - done() - return - } - - var buf = '' - res - .on('error', function (err) { throw err }) - .on('data', function (data) { buf += data }) - .on('end', function () { - assert.equal(buf, testfile) - done() - }) - }) - }) -}) - -describe('.ls', function () { - var folder = 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q' - it('ls', function (done) { - if (!isNode) { - return done() - } - - this.timeout(100000) - - apiClients['a'].ls(folder, function (err, res) { - if (err) { - throw err - } - - var objs = { - Hash: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q', - Links: [{ - Name: 'add.js', - Hash: 'QmaeuuKLHzirbVoTjb3659fyyV381amjaGrU2pecHEWPrN', - Size: 481, - Type: 2 - }, { - Name: 'cat.js', - Hash: 'QmTQhTtDWeaaP9pttDd1CuoVTLQm1w51ABfjgmGUbCUF6i', - Size: 364, - Type: 2 - }, { - Name: 'files', - Hash: 'QmTYFLz5vsdMpq4XXw1a1pSxujJc9Z5V3Aw1Qg64d849Zy', - Size: 132, - Type: 1 - }, { - Name: 'ipfs-add.js', - Hash: 'QmTjXxUemcuMAZ2KNN3iJGWHwrkMsW8SWEwkYVSBi1nFD9', - Size: 315, - Type: 2 - }, { - Name: 'ls.js', - Hash: 'QmXYUXDFNNh1wgwtX5QDG7MsuhAAcE9NzDYnz8SjnhvQrK', - Size: 428, - Type: 2 - }, { - Name: 'version.js', - Hash: 'QmUmDmH4hZgN5THnVP1VjJ1YWh5kWuhLGUihch8nFiD9iy', - Size: 153, - Type: 2 }] - } - - assert.deepEqual(res.Objects[0], objs) - done() - }) - }) -}) - -if (isNode) { - describe('.refs', function () { - var folder = 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q' - - it('refs', function (done) { - if (!isNode) { - return done() - } - - this.timeout(10000) - apiClients['a'].refs(folder, {'format': ' '}, function (err, objs) { - if (err) { - throw err - } - - var result = [{ - Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmaeuuKLHzirbVoTjb3659fyyV381amjaGrU2pecHEWPrN add.js', - Err: '' }, - { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmTQhTtDWeaaP9pttDd1CuoVTLQm1w51ABfjgmGUbCUF6i cat.js', - Err: '' }, - { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmTYFLz5vsdMpq4XXw1a1pSxujJc9Z5V3Aw1Qg64d849Zy files', - Err: '' }, - { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmTjXxUemcuMAZ2KNN3iJGWHwrkMsW8SWEwkYVSBi1nFD9 ipfs-add.js', - Err: '' }, - { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmXYUXDFNNh1wgwtX5QDG7MsuhAAcE9NzDYnz8SjnhvQrK ls.js', - Err: '' }, - { Ref: 'QmaMTzaGBmdLrispnPRTESta4yDQdK4uKSVcQez2No4h6q QmUmDmH4hZgN5THnVP1VjJ1YWh5kWuhLGUihch8nFiD9iy version.js', - Err: '' } ] - - assert.deepEqual(objs, result) - - done() - }) - }) - }) -} -*/ - -// data structure commands - -/* -describe('.block', function () { - var blorbKey = 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ' - var blorb = Buffer('blorb') - - it('block.put', function (done) { - this.timeout(10000) - - apiClients['a'].block.put(blorb, function (err, res) { - if (err) throw err - var store = res.Key - assert.equal(store, 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ') - done() - }) - }) - - it('block.get', function (done) { - this.timeout(10000) - - apiClients['a'].block.get(blorbKey, function (err, res) { - if (err) throw err - - if (typeof res === 'string') { - // Just a string - assert.equal(res, 'blorb') - done() - return - } - - var buf = '' - res - .on('data', function (data) { buf += data }) - .on('end', function () { - assert.equal(buf, 'blorb') - done() - }) - }) - }) -}) - -describe('.object', function () { - var testObject = Buffer(JSON.stringify({Data: 'testdata', Links: []})) - var testObjectHash = 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD' - var testPatchObject = Buffer(JSON.stringify({Data: 'new test data'})) - var testPatchObjectHash = 'QmWJDtdQWQSajQPx1UVAGWKaSGrHVWdjnrNhbooHP7LuF2' - - it('object.put', function (done) { - apiClients['a'].object.put(testObject, 'json', function (err, res) { - if (err) throw err - var obj = res - assert.equal(obj.Hash, testObjectHash) - assert.equal(obj.Links.length, 0) - done() - }) - }) - - it('object.get', function (done) { - apiClients['a'].object.get(testObjectHash, function (err, res) { - if (err) { - throw err - } - var obj = res - assert.equal(obj.Data, 'testdata') - assert.equal(obj.Links.length, 0) - done() - }) - }) - - it('object.data', function (done) { - this.timeout(10000) - apiClients['a'].object.data(testObjectHash, function (err, res) { - if (err) throw err - - if (typeof res === 'string') { - // Just a string - assert.equal(res, 'testdata') - done() - return - } - - var buf = '' - res - .on('error', function (err) { throw err }) - .on('data', function (data) { buf += data }) - .on('end', function () { - assert.equal(buf, 'testdata') - done() - }) - }) - }) - - it('object.stat', function (done) { - this.timeout(10000) - apiClients['a'].object.stat(testObjectHash, function (err, res) { - if (err) { - throw err - } - assert.deepEqual(res, { - Hash: 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD', - NumLinks: 0, - BlockSize: 10, - LinksSize: 2, - DataSize: 8, - CumulativeSize: 10 - }) - done() - }) - }) - - it('object.links', function (done) { - this.timeout(10000) - apiClients['a'].object.links(testObjectHash, function (err, res) { - if (err) { - throw err - } - - assert.deepEqual(res, { - Hash: 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD', - Links: [] - }) - done() - }) - }) - - it('object.patch', function (done) { - this.timeout(10000) - apiClients['a'].object.put(testPatchObject, 'json', function (err, res) { - if (err) { - throw err - } - apiClients['a'].object.patch(testObjectHash, ['add-link', 'next', testPatchObjectHash], function (err, res) { - if (err) { - throw err - } - var o = JSON.parse(res) - assert.deepEqual(o, { - Hash: 'QmZFdJ3CQsY4kkyQtjoUo8oAzsEs5BNguxBhp8sjQMpgkd', - Links: null - }) - apiClients['a'].object.get(o.Hash, function (err, res) { - if (err) { - throw err - } - assert.deepEqual(JSON.parse(res), { - Data: 'testdata', - Links: [{ - Name: 'next', - Hash: 'QmWJDtdQWQSajQPx1UVAGWKaSGrHVWdjnrNhbooHP7LuF2', - Size: 15 - }] - }) - done() - }) - }) - }) - }) -}) -*/ - -// advanced commands - -/* -describe('.mount', function () { - // requires FUSE to be installed, not practical for testing -}) - -describe('.diag', function () { - it('.diag.net', function (done) { - this.timeout(1000000) - apiClients['a'].diag.net(function (err, res) { - if (err) { - throw err - } - assert(res) - done() - }) - }) -}) - -describe('.name', function () { - var name - it('.name.publish', function (done) { - apiClients['a'].name.publish('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', function (err, res) { - if (err) { - throw err - } - assert(res) - name = res - done() - }) - }) - it('.name.resolve', function (done) { - apiClients['a'].name.resolve(name.Name, function (err, res) { - if (err) { - throw err - } - - assert(res) - assert.deepEqual(res, { Path: '/ipfs/' + name.Value }) - done() - }) - }) -}) - -describe('.pin', function () { - it('.pin.add', function (done) { - this.timeout(5000) - - apiClients['b'].pin.add('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', {recursive: false}, function (err, res) { - if (err) { - throw err - } - assert.equal(res.Pinned[0], 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') - done() - }) - }) - - it('.pin.list', function (done) { - this.timeout(5000) - - apiClients['b'].pin.list(function (err, res) { - if (err) { - throw err - } - assert(res) - done() - }) - }) - - it('.pin.remove', function (done) { - this.timeout(5000) - - apiClients['b'].pin.remove('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', {recursive: false}, function (err, res) { - if (err) { - throw err - } - assert(res) - apiClients['b'].pin.list('direct', function (err, res) { - if (err) { - throw err - } - assert(res) - assert.equal(Object.keys(res.Keys).length, 0) - done() - }) - }) - }) -}) -*/ - -// network commands - -/* -describe('.swarm', function () { - it('.swarm.peers', function (done) { - this.timeout(5000) - - apiClients['a'].swarm.peers(function (err, res) { - if (err) { - throw err - } - - assert(res.Strings.length >= 2) - done() - }) - }) - it('.swarm.connect', function (done) { - // Done in the 'before' segment - done() - }) -}) - -if (isNode) { - // Ping returns streaming json in the browser - // which breaks the parser atm. See https://github.com/ipfs/node-ipfs-api/issues/86 - describe('.ping', function () { - it('ping another peer', function (done) { - apiClients['b'].id(function (err, id) { - if (err) { - throw err - } - - apiClients['a'].ping(id.ID, function (err, res) { - if (err) { - throw err - } - assert(res) - assert(res.Success) - done() - }) - }) - }) - }) -} - -describe('.id', function () { - it('id', function (done) { - this.timeout(10000) - apiClients['a'].id(function (err, res) { - if (err) throw err - var id = res - assert(id.ID) - assert(id.PublicKey) - done() - }) - }) -}) - -describe('.dht', function () { - it('returns an error when getting a non-existent key from the DHT', - function (done) { - this.timeout(20000) - apiClients['a'].dht.get('non-existent', {timeout: '100ms'}, function (err, value) { - assert(err) - done() - }) - }) - - it('puts and gets a key value pair in the DHT', function (done) { - this.timeout(20000) - - apiClients['a'].dht.put('scope', 'interplanetary', function (err, res) { - if (err) { - throw err - } - - return done() - - // non ipns or pk hashes fail to fetch, known bug - // bug: https://github.com/ipfs/go-ipfs/issues/1923#issuecomment-152932234 - // apiClients['a'].dht.get('scope', function (err, value) { - // console.log('->>', err, value) - // if (err) { - // throw err - // } - // assert.equal(value, 'interplanetary') - // done() - // }) - }) - }) - - it('.dht.findprovs', function (done) { - apiClients['a'].dht.findprovs('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', function (err, res) { - if (err) { - throw err - } - assert(res) - done() - }) - }) -}) -*/ - -// tool commands - -/* -describe('.config', function () { - it('.config.{set, get}', function (done) { - this.timeout(10000) - - var confKey = 'arbitraryKey' - var confVal = 'arbitraryVal' - - apiClients['a'].config.set(confKey, confVal, function (err, res) { - if (err) throw err - apiClients['a'].config.get(confKey, function (err, res) { - if (err) throw err - assert.equal(res.Value, confVal) - done() - }) - }) - }) - - it('.config.show', function (done) { - this.timeout(10000) - - apiClients['c'].config.show(function (err, res) { - if (err) { - throw err - } - assert(res) - done() - }) - }) - - it('.config.replace', function (done) { - this.timeout(10000) - - if (!isNode) { - return done() - } - - apiClients['c'].config.replace(__dirname + '/r-config.json', function (err, res) { - if (err) { - throw err - } - - assert.equal(res, '') - done() - }) - }) -}) - -describe('.update (currently disabled, wait for IPFS 0.4.0 release', function () { - it('.update.apply') - it('.update.check') - it('.update.log') -}) - -describe('.version', function () { - it('checks the version', function (done) { - this.timeout(10000) - apiClients['a'].version(function (err, res) { - if (err) { - throw err - } - assert(res) - assert(res.Version) - console.log(' - running against version', res.Version) - done() - }) - }) -}) - -describe('.commands', function () { - it('lists commands', function (done) { - this.timeout(10000) - apiClients['a'].commands(function (err, res) { - if (err) { - throw err - } - assert(res) - done() - }) - }) -}) -*/ - -// other - -/* -describe('.log', function () { - // TODO news 0.3.9 ndjson stuff - it.skip('.log.tail', function (done) { - apiClients['a'].log.tail(function (err, res) { - if (err) { - throw err - } - - console.log('->', res) - done() - }) - }) -}) -*/ - -// ending - -test('close disposable daemon', function (t) { - var stopped - daemon.stopDaemon(function (err) { - if (!stopped) { - stopped = true - t.error(err) - t.end() - } - }) -}) diff --git a/tests/test-folder/add.js b/tests/test-folder/add.js deleted file mode 100644 index be3fdedd48..0000000000 --- a/tests/test-folder/add.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict' - -var ipfs = require('../src')('localhost', 5001) - -var f1 = 'Hello' -var f2 = 'World' - -ipfs.add([new Buffer(f1), new Buffer(f2)], function (err, res) { - if (err || !res) return console.log(err) - - for (var i = 0; i < res.length; i++) { - console.log(res[i]) - } -}) - -ipfs.add(['./files/hello.txt', './files/ipfs.txt'], function (err, res) { - if (err || !res) return console.log(err) - - for (var i = 0; i < res.length; i++) { - console.log(res[i]) - } -}) diff --git a/tests/test-folder/cat.js b/tests/test-folder/cat.js deleted file mode 100644 index d24aa5a2de..0000000000 --- a/tests/test-folder/cat.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict' - -var ipfs = require('../src')('localhost', 5001) - -var hash = [ - 'QmdFyxZXsFiP4csgfM5uPu99AvFiKH62CSPDw5TP92nr7w', - 'QmY9cxiHqTFoWamkQVkpmmqzBrY3hCBEL2XNu3NtX74Fuu' -] - -ipfs.cat(hash, function (err, res) { - if (err || !res) return console.log(err) - - if (res.readable) { - res.pipe(process.stdout) - } else { - console.log(res) - } -}) diff --git a/tests/test-folder/files/hello.txt b/tests/test-folder/files/hello.txt deleted file mode 100644 index e965047ad7..0000000000 --- a/tests/test-folder/files/hello.txt +++ /dev/null @@ -1 +0,0 @@ -Hello diff --git a/tests/test-folder/files/ipfs.txt b/tests/test-folder/files/ipfs.txt deleted file mode 100644 index 95a3116521..0000000000 --- a/tests/test-folder/files/ipfs.txt +++ /dev/null @@ -1 +0,0 @@ -IPFS diff --git a/tests/test-folder/ipfs-add.js b/tests/test-folder/ipfs-add.js deleted file mode 100755 index 572791db2b..0000000000 --- a/tests/test-folder/ipfs-add.js +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env node - -var ipfs = require('../src')('localhost', 5001) -var files = process.argv.slice(2) - -ipfs.add(files, {recursive: true}, function (err, res) { - if (err || !res) return console.log(err) - - for (var i = 0; i < res.length; i++) { - console.log('added', res[i].Hash, res[i].Name) - } -}) diff --git a/tests/test-folder/ls.js b/tests/test-folder/ls.js deleted file mode 100644 index 6006e8696e..0000000000 --- a/tests/test-folder/ls.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict' - -var ipfs = require('../src')('localhost', 5001) - -var hash = ['QmdbHK6gMiecyjjSoPnfJg6iKMF7v6E2NkoBgGpmyCoevh'] - -ipfs.ls(hash, function (err, res) { - if (err || !res) return console.log(err) - - res.Objects.forEach(function (node) { - console.log(node.Hash) - - console.log('Links [%d]', node.Links.length) - node.Links.forEach(function (link, i) { - console.log('[%d]', i, link) - }) - }) -}) diff --git a/tests/test-folder/version.js b/tests/test-folder/version.js deleted file mode 100644 index c695985250..0000000000 --- a/tests/test-folder/version.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict' - -var ipfs = require('../src')('localhost', 5001) - -ipfs.commands(function (err, res) { - if (err) throw err - console.log(res) -}) diff --git a/tests/testconfig.json b/tests/testconfig.json deleted file mode 100644 index 7ad668e1dd..0000000000 --- a/tests/testconfig.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "test": "beep boop", - "Addresses": { - "API": "/ip4/127.0.0.1/tcp/5001", - "Gateway": "/ip4/127.0.0.1/tcp/8080", - "Swarm": [ - "/ip4/0.0.0.0/tcp/4001" - ] - }, - "Bootstrap": [ - "/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", - "/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRadHn95W2CrSFmZuTdDWP8HXaHca9z", - "/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLpPVmHKQ4XTPdz8tjDFgdeRFkpV8JgYq8JVJ69RrZm", - "/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm", - "/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu", - "/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64", - "/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd", - "/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3", - "/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx" - ], - "Datastore": { - "Path": "/home/krl/.ipfs/datastore", - "Type": "leveldb" - }, - "Discovery": { - "MDNS": { - "Enabled": false, - "Interval": 0 - } - }, - "Gateway": { - "RootRedirect": "", - "Writable": false - }, - "Identity": { - "PeerID": "QmTF1MqD5hFgRztwxeosess2S1PpSm6fpy2jt15gZjr39c", - "PrivKey": "CAASqxIwggknAgEAAoICAQC8RXr0/XtKFAn5ReHm0AoUQYpMxckyISsdKkDiGTXQW6h3IuU7kypoeSUNPerp+/+dJCXe5dY+GnT9jRXbZBUfVWYuEnMbCCnGHhi28wD71TYgfLuJlZjRKy1eBIz57bOtAVY8CnLM4WPLQLhcwgSZ1G83D6sRTKNOOqZMf37V/I1dxDg2kqi0JujBodlIP0WjDyBJvtPfLUSoytYznIOmJfi/K5ofPm54y5zX81lwuRGAdCXDIwCwcIwFY2EC6gWVECDLTTBnr7ZXITNtTBOWx6tIEmTF8K/hQN3KzazVEkYn7p4r0QL4zJnQCBIr09HhvOuNTK9XdqBeQJsVVm2uM+//acgdlYS8V+F8FQQHCihsaKAEYeDSGuKuzEbLohc8donWy+3k5jn/SwY8jJLaXtBJpux1sGdRG+ko5mFdXViII5e8gbiSdC1JiDKdeYmUSAm27IvuGay4FplK8wczZrComdsS3sxpSvTrS6KulNv7WTZEKPAWtMFGX+58krOpDgOkKg8IvwucmXsrYD5Q+razorP3v4QAVhouhxQNKzVpmOYZemOeJrTf5smUBjTGLIp343N36kWqZVp+bqTjl8x5uRbgn/wthDWHsyV81M6OwCCPtiKLJMKkztlArFnnT5sZ3aG7sFj4AgnxcqHHDo4nUAI+t4tOb9WxcAMR2wIDAQABAoICAG7OxetjNSkIWkZoJujeENCTMn60+hGTC/kCYWWxSMb061YTJ6/EkfUjN/dvNc+5DVzDZbamt02d7LU+UFrrsLLcZGNBYJXMXCnKlOk4ZJ/TgSPlxcrYTTTuoKjxLLf8ev+cBdEYpTCIh1+dG+UcG/Ed4scZZams3YCxbCch8tim590EG8Gi18AQFnXAeE3ZT3cE9A/zTGfSENL3btK5j5I+TwTU+MTizcoyrIE9LKr3gaGEuqT6+PDfjMmvD+3TJq3w7Bw7tf2QoVTuqYHugKkBo4Grsbv+SMXek6tFGi/drYTbICTRw1oDsZOK7Ib3CFRACLMFKz3jB8fxZlVMpQgawiyeBPx0Z4xf6+OG0yUGxGUKBcuATzON29NJWplZxPtfClCozdsm/3VCCPe7ruDUoDEWobhvKh3Ax+8Cdvt9ajoon6qNK3QgJqrm8Xc50MtjaPhZASGw1YweOfxAeQRHVYAJHrkBwblNzOnCMT8F4uKpeI4C9rUjKTOJu53qV1shwIM+zUGtmRvJUTKA15twqnntQrkhO990Dtl3tON/yx/D2ilLYCVuEPqfmW5/xiOrabgS1OlXLZ7teat85JOyqgZ1R/uxFzQljRwVsnCG6DlobkGHbnKwHq4zyV5UXZUDTM1QAgw6ksmkDWOQ9iYJrTk7UTmnNeAb0g4G2tJhAoIBAQDyT8qoPmZkONFktdnUUnjAeuNZ55b2u7pBq+1b2N4ZzhZQjCRCJwK3zxDYpoxWmH9etJcvv1RvZRaWngr9vECMzUEJmklZlCpW2fdxhvprABHaywklFt2heOo8krmfvbZIVMQ6Q9xWRz5sfiV+k3C8q2Y6RIMLuGquYzk8o2pAPG5aD7gHxIeq4JRGCXyJyovgX2AOZmtZe9ttc+dhxKm71V8bI0e88JrusKeapUnVJUm8qgP6PBg+F8MZh1U3kjHczKeB1ND3X9oFQtLP9ypsi4Ngqgvw0O3+CGY/nvJ6c6ynryiVcmURdQY66f+57CtPjjdUVsSoR/bce5S2lrHNAoIBAQDG6C5iHVuX9OplWcA70U7Tc4eiac803QRUL+zdDOC74Qw2Coxr5Nsxjz8/i+6DnOCeWkJBh/uGEaxdYYZHU90LVf/NSA3zguGt6Z0g3MMvMNT9KGgoZl2T5Y/CCgCfrt6gTGRy7PmF+uLtgHcsKQLqCzMarOSVyue35ztxuI6NeRPvlNkoJ54F/+jnY1/6MrMTPXpybHXwf40piyLPuyapqBgyWkRBwPORR9Ucdiz7KhBnZhj7NYpwvut/KgufuU3WF9bkknfFlOJzVp8ZgefxHE8lHPuR0PnWyHwv3v5hgALYwenREcM5MUbRZ7tc18FkWBVOPlvszqSGujq3nMpHAoIBAGV2R9OfHVzF9dgH1Yh0aB+g1WYl9S6neNxa027sJkQD6ZAcvmn8z8SLrfAp/QWdoWfUkqHpqb9jQswarVuF4jmTELKmqiQaSIhJiLU+4cjAJLnK3q9rHa6pZNusTJG47ITpCamkFLUD6/2d7LFNp5043/tyCLV1qSYQYj0j6C+xnjuT7WlDP9OrairRehZwe5WeGiitdjHoDP+N0ss7gB8ov0Qrx7Qzw4xC6Et2/q2DiZa4UiYL19LYPFeKNYKpcruT7mgM5ttOhYpCaueuBVOiL4bgbVOPCLigZ8AoHDxuB1PHomTBm9RtfghZRz1gyNntIPntwzb7u0Cjdqfl/dkCggEAauDxo3jg8ZsBpCoA2GOUtpw6gnPWijJElDQYU4MK8wlvNU6fu44ClfPB6ZR4OjI+o/gd5/Z4mca/VoID1Cnk+aVhSV3xWSq3t2pzKuhU3POhTtK6fRLcL49Hmt0jDqq5J2tFAlgBkBOKglHoN0tmLHqOIERMo4yezDusvmOL/crUgoT51tDK4bBr5oGIXfmGLc14ESnkibEQGgWQVAzdLoaLUesdCDP07NirU5rQerlUjSrYO4u+cuyzv+XIzy+T+nle1/037Gwe7hjabqtWBUHP6UJUjzq6NMYPrO1mxN8zKGOyDsw7mWy3/+d8TtwEJ7YI5L0vSeSTlW1WBblzGwKCAQBeL4WoC0rH7B+MBw/+q3NMozlq4pE1vAC/7L06GhTPQi3Sklz/HHfw1g2aeYYIYpZ3S0Q+QHBs+fpspuPIBE0xTZPNJIAPTOW3WxODCya1rl521Syy8t57m9UPyVG3scSbWrJxH99BQVSPZzVMI3WO2XWGYupUIkVo+MW4WKhBkHd6a8inuJmjExDWm+bwaoQgUxNwE3c1C5OFwkAU1ofhNijE02IJX0EOaYjvNELT0Na3B0T7KZ72Ut4u33byPgEHa9SsPEurctbHy2HdpOGHdpxx4r+7ZQUtg1UZ0ZRQN8B8TyozD05AXQ9V8ybdzU1jSpQYWqbfkXl+LllJBa4E" - }, - "Log": { - "MaxAgeDays": 0, - "MaxBackups": 1, - "MaxSizeMB": 250 - }, - "Mounts": { - "FuseAllowOther": false, - "IPFS": "/ipfs", - "IPNS": "/ipns" - }, - "SupernodeRouting": { - "Servers": [ - "/ip4/104.236.176.52/tcp/4002/ipfs/QmXdb7tWTxdFEQEFgWBqkuYSrZd3mXrC7HxkD4krGNYx2U", - "/ip4/104.236.179.241/tcp/4002/ipfs/QmVRqViDByUxjUMoPnjurjKvZhaEMFDtK35FJXHAM4Lkj6", - "/ip4/104.236.151.122/tcp/4002/ipfs/QmSZwGx8Tn8tmcM4PtDJaMeUQNRhNFdBLVGPzRiNaRJtFH", - "/ip4/162.243.248.213/tcp/4002/ipfs/QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP", - "/ip4/128.199.219.111/tcp/4002/ipfs/Qmb3brdCYmKG1ycwqCbo6LUwWxTuo3FisnJV2yir7oN92R", - "/ip4/104.236.76.40/tcp/4002/ipfs/QmdRBCV8Cz2dGhoKLkD3YjPwVFECmqADQkx5ZteF2c6Fy4", - "/ip4/178.62.158.247/tcp/4002/ipfs/QmUdiMPci7YoEUBkyFZAh2pAbjqcPr7LezyiPD2artLw3v", - "/ip4/178.62.61.185/tcp/4002/ipfs/QmVw6fGNqBixZE4bewRLT2VXX7fAHUHs8JyidDiJ1P7RUN" - ] - }, - "Tour": { - "Last": "" - }, - "Version": { - "AutoUpdate": "minor", - "Check": "error", - "CheckDate": "0001-01-01T00:00:00Z", - "CheckPeriod": "172800000000000", - "Current": "0.3.0" - } -} diff --git a/tests/testfile.txt b/tests/testfile.txt deleted file mode 100644 index 84b31025b1..0000000000 --- a/tests/testfile.txt +++ /dev/null @@ -1 +0,0 @@ -Plz add me! From f9ffa7cd9e71514712a6b45540a46f36ddf06ab5 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 27 Nov 2015 22:34:03 +0000 Subject: [PATCH 09/16] refresh --- package.json | 1 + src/http-api/index.js | 0 src/{ => ipfs-core}/index.js | 0 3 files changed, 1 insertion(+) create mode 100644 src/http-api/index.js rename src/{ => ipfs-core}/index.js (100%) diff --git a/package.json b/package.json index ff152556f9..e11eeae46c 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "tape": "^4.2.2" }, "dependencies": { + "hapi": "^11.1.2", "ipfs-api": "^2.7.0", "ronin": "^0.3.11", "vinyl": "^0.5.1" diff --git a/src/http-api/index.js b/src/http-api/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/index.js b/src/ipfs-core/index.js similarity index 100% rename from src/index.js rename to src/ipfs-core/index.js From 0685f53820b539ed2e82e42ea67d0b86830b8529 Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 27 Nov 2015 22:34:17 +0000 Subject: [PATCH 10/16] badgers --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index dd1ef4af28..624b41e6a3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ js-ipfs ======= +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) ![Build Status](https://travis-ci.org/diasdavid/js-ipfs.svg?style=flat-square)](https://travis-ci.org/diasdavid/js-ipfs) ![](https://img.shields.io/badge/coverage-%3F-yellow.svg?style=flat-square) [![Dependency Status](https://david-dm.org/diasdavid/js-ipfs.svg?style=flat-square)](https://david-dm.org/diasdavid/js-ipfs) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) + > IPFS JavaScript implementation entry point and roadmap # Description From 29abfb0ceebb48342f044ddc5f4f71a13a49263b Mon Sep 17 00:00:00 2001 From: David Dias Date: Fri, 27 Nov 2015 22:36:40 +0000 Subject: [PATCH 11/16] update package.json --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index e11eeae46c..5725621d0f 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,7 @@ "devDependencies": { "ipfsd-ctl": "^0.6.1", "pre-commit": "^1.1.2", - "standard": "^5.3.1", - "tape": "^4.2.2" + "standard": "^5.3.1" }, "dependencies": { "hapi": "^11.1.2", From 583e49be1ea1cd3cf4004ba7ab811a25f8ba132d Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 10 Dec 2015 11:22:50 -0800 Subject: [PATCH 12/16] add coverage script --- coverage/coverage.json | 1 + coverage/lcov-report/base.css | 212 ++++++++++++++++ coverage/lcov-report/index.html | 93 +++++++ coverage/lcov-report/ipfs-core/config.js.html | 80 ++++++ coverage/lcov-report/ipfs-core/index.html | 106 ++++++++ coverage/lcov-report/ipfs-core/index.js.html | 233 ++++++++++++++++++ coverage/lcov-report/prettify.css | 1 + coverage/lcov-report/prettify.js | 1 + coverage/lcov-report/sort-arrow-sprite.png | Bin 0 -> 209 bytes coverage/lcov-report/sorter.js | 158 ++++++++++++ coverage/lcov.info | 67 +++++ package.json | 17 +- bin.js => src/cli/bin.js | 8 +- {commands => src/cli/commands}/add.js | 0 {commands => src/cli/commands}/cat.js | 0 {commands => src/cli/commands}/commands.js | 0 {commands => src/cli/commands}/daemon.js | 0 {commands => src/cli/commands}/dns.js | 0 {commands => src/cli/commands}/get.js | 0 {commands => src/cli/commands}/id.js | 0 {commands => src/cli/commands}/init.js | 0 {commands => src/cli/commands}/ls.js | 0 {commands => src/cli/commands}/mount.js | 0 {commands => src/cli/commands}/ping.js | 0 {commands => src/cli/commands}/refs.js | 0 {commands => src/cli/commands}/resolve.js | 0 {commands => src/cli/commands}/update.js | 0 {commands => src/cli/commands}/version.js | 0 src/ipfs-core/config.js | 5 + src/ipfs-core/index.js | 43 +++- tests/jsipfs-test.js | 49 ++++ ...c55d25f3042c22501e41d1246e7a1e9d3d8ec.data | 28 +++ ...dcf095c1d219356cdf538ffce705a52d5738d.data | Bin 0 -> 10765 bytes ...ea3b310512d7767a9abfbd7a928a85e977173.data | 4 + ...0b0d3be3528fbbcc814feb7f2fbf71ca06162.data | Bin 0 -> 10807 bytes ...60e64383755a8c5163ba3c053c3b65777ed16.data | 4 + ...ccadfda3d8bc7d2f8cdf302aa51dae8dae9da.data | Bin 0 -> 10891 bytes ...223c2d96a9f70b5fd8b1d513f8c5b69dcaed4.data | 23 ++ ...932be52c56d99c5966b65e0111239f098bbef.data | 2 + ...3346a644605d7614dca53cd3a59f7385a8abb.data | 114 +++++++++ ...7f28fa9367ee167c312e6d65a2e02e81ab815.data | Bin 0 -> 10765 bytes ...68af3d10e1a497971629c07606bfdb812303d.data | Bin 0 -> 309 bytes ...02a72b057d1c7f2e682d0776a5363e2cca974.data | 3 + ...16cfa9a7ae5533f8e997cdab2ebadd7506340.data | 4 + ...e5cf3497a7845ee8f94456ccf4d1d2f6602b5.data | 24 ++ ...c0f1e4947cff8e422610996e609dbcb976598.data | 9 + ...62f687a00c638bcb580feae06452e0c1f20b4.data | 8 + ...56baef91c7dc345e73d049ab570abe10dfbb9.data | Bin 0 -> 10849 bytes ...2fdadf9d45666c3be122a2efb5db93c1d5fa6.data | 55 +++++ ...be72a83e80f9c7bca1abcaa42298a57a33ff5.data | Bin 0 -> 101 bytes ...fb92427ae41e4649b934ca495991b7852b855.data | 0 ...41317afc9f967abe2aa05e7c641f7bbe98a37.data | Bin 0 -> 10765 bytes ...807def07b0db2f018808620eb30b980e94011.data | 3 + ...38b95dd29d31eac6433af0fb6fcd83dd80778.data | 3 + tests/test-repo/config | 88 +++++++ tests/test-repo/datastore/000002.ldb | Bin 0 -> 211 bytes tests/test-repo/datastore/000005.ldb | Bin 0 -> 1120 bytes tests/test-repo/datastore/CURRENT | 1 + tests/test-repo/datastore/LOCK | 0 tests/test-repo/datastore/LOG | 10 + tests/test-repo/datastore/LOG.old | 10 + tests/test-repo/datastore/MANIFEST-000007 | Bin 0 -> 293 bytes tests/test-repo/version | 1 + 63 files changed, 1451 insertions(+), 17 deletions(-) create mode 100644 coverage/coverage.json create mode 100644 coverage/lcov-report/base.css create mode 100644 coverage/lcov-report/index.html create mode 100644 coverage/lcov-report/ipfs-core/config.js.html create mode 100644 coverage/lcov-report/ipfs-core/index.html create mode 100644 coverage/lcov-report/ipfs-core/index.js.html create mode 100644 coverage/lcov-report/prettify.css create mode 100644 coverage/lcov-report/prettify.js create mode 100644 coverage/lcov-report/sort-arrow-sprite.png create mode 100644 coverage/lcov-report/sorter.js create mode 100644 coverage/lcov.info rename bin.js => src/cli/bin.js (55%) rename {commands => src/cli/commands}/add.js (100%) rename {commands => src/cli/commands}/cat.js (100%) rename {commands => src/cli/commands}/commands.js (100%) rename {commands => src/cli/commands}/daemon.js (100%) rename {commands => src/cli/commands}/dns.js (100%) rename {commands => src/cli/commands}/get.js (100%) rename {commands => src/cli/commands}/id.js (100%) rename {commands => src/cli/commands}/init.js (100%) rename {commands => src/cli/commands}/ls.js (100%) rename {commands => src/cli/commands}/mount.js (100%) rename {commands => src/cli/commands}/ping.js (100%) rename {commands => src/cli/commands}/refs.js (100%) rename {commands => src/cli/commands}/resolve.js (100%) rename {commands => src/cli/commands}/update.js (100%) rename {commands => src/cli/commands}/version.js (100%) create mode 100644 src/ipfs-core/config.js create mode 100644 tests/jsipfs-test.js create mode 100644 tests/test-repo/blocks/1220120f/1220120f6af601d46e10b2d2e11ed71c55d25f3042c22501e41d1246e7a1e9d3d8ec.data create mode 100644 tests/test-repo/blocks/122031d6/122031d6da265092f1b03fec969243fdcf095c1d219356cdf538ffce705a52d5738d.data create mode 100644 tests/test-repo/blocks/122031e7/122031e7a41c15d03feb8cd793c3348ea3b310512d7767a9abfbd7a928a85e977173.data create mode 100644 tests/test-repo/blocks/12203628/12203628a4a19525dd84bbbffe132ec0b0d3be3528fbbcc814feb7f2fbf71ca06162.data create mode 100644 tests/test-repo/blocks/12204a5a/12204a5a95586f52e25811cf214677160e64383755a8c5163ba3c053c3b65777ed16.data create mode 100644 tests/test-repo/blocks/12205200/12205200cc6b6f79e1588480d9f9016ccadfda3d8bc7d2f8cdf302aa51dae8dae9da.data create mode 100644 tests/test-repo/blocks/122052c6/122052c63c7775396b3f82c639977a7223c2d96a9f70b5fd8b1d513f8c5b69dcaed4.data create mode 100644 tests/test-repo/blocks/12205994/122059948439065f29619ef41280cbb932be52c56d99c5966b65e0111239f098bbef.data create mode 100644 tests/test-repo/blocks/122062ce/122062ce1f2c91a13a97b596e873b5a3346a644605d7614dca53cd3a59f7385a8abb.data create mode 100644 tests/test-repo/blocks/12206781/122067817186b8ff365c758f387e3ae7f28fa9367ee167c312e6d65a2e02e81ab815.data create mode 100644 tests/test-repo/blocks/12207028/122070286b9afa6620a66f715c7020d68af3d10e1a497971629c07606bfdb812303d.data create mode 100644 tests/test-repo/blocks/1220709b/1220709b2dcc5f6a90ad64d6fe3a5d202a72b057d1c7f2e682d0776a5363e2cca974.data create mode 100644 tests/test-repo/blocks/12207fb8/12207fb898b5d7be46d85feb75d894e16cfa9a7ae5533f8e997cdab2ebadd7506340.data create mode 100644 tests/test-repo/blocks/12208b87/12208b872ca4ee517608331696dd6b3e5cf3497a7845ee8f94456ccf4d1d2f6602b5.data create mode 100644 tests/test-repo/blocks/122090c0/122090c07a7795c1193510a696d1fdfc0f1e4947cff8e422610996e609dbcb976598.data create mode 100644 tests/test-repo/blocks/1220929a/1220929a303c39da8a0b67c09697462f687a00c638bcb580feae06452e0c1f20b4.data create mode 100644 tests/test-repo/blocks/1220933b/1220933b41d37fd4508cdff45930dff56baef91c7dc345e73d049ab570abe10dfbb9.data create mode 100644 tests/test-repo/blocks/1220a52c/1220a52c3602030cb912edfe4de97002fdadf9d45666c3be122a2efb5db93c1d5fa6.data create mode 100644 tests/test-repo/blocks/1220c0fc/1220c0fc6b49543d7bf04e83d2a5a7cbe72a83e80f9c7bca1abcaa42298a57a33ff5.data create mode 100644 tests/test-repo/blocks/1220e3b0/1220e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.data create mode 100644 tests/test-repo/blocks/1220e605/1220e605408ac3f78113ac9a7fd486441317afc9f967abe2aa05e7c641f7bbe98a37.data create mode 100644 tests/test-repo/blocks/1220e6a0/1220e6a045864ff8569e43e4866c0af807def07b0db2f018808620eb30b980e94011.data create mode 100644 tests/test-repo/blocks/1220ec5b/1220ec5b533a3218991f4377b8b8c2538b95dd29d31eac6433af0fb6fcd83dd80778.data create mode 100644 tests/test-repo/config create mode 100644 tests/test-repo/datastore/000002.ldb create mode 100644 tests/test-repo/datastore/000005.ldb create mode 100644 tests/test-repo/datastore/CURRENT create mode 100644 tests/test-repo/datastore/LOCK create mode 100644 tests/test-repo/datastore/LOG create mode 100644 tests/test-repo/datastore/LOG.old create mode 100644 tests/test-repo/datastore/MANIFEST-000007 create mode 100644 tests/test-repo/version diff --git a/coverage/coverage.json b/coverage/coverage.json new file mode 100644 index 0000000000..3884448090 --- /dev/null +++ b/coverage/coverage.json @@ -0,0 +1 @@ +{"/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/index.js":{"path":"/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/index.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":0,"8":1,"9":1,"10":0,"11":1,"12":0,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":0,"22":1,"23":1,"24":1},"b":{"1":[0,1],"2":[0,1],"3":[0,1],"4":[1,0],"5":[0,1]},"f":{"1":1,"2":0,"3":0,"4":1,"5":0},"fnMap":{"1":{"name":"IPFS","line":10,"loc":{"start":{"line":10,"column":0},"end":{"line":10,"column":17}}},"2":{"name":"(anonymous_2)","line":34,"loc":{"start":{"line":34,"column":14},"end":{"line":34,"column":54}}},"3":{"name":"(anonymous_3)","line":39,"loc":{"start":{"line":39,"column":16},"end":{"line":39,"column":36}}},"4":{"name":"(anonymous_4)","line":43,"loc":{"start":{"line":43,"column":17},"end":{"line":43,"column":43}}},"5":{"name":"(anonymous_5)","line":55,"loc":{"start":{"line":55,"column":12},"end":{"line":55,"column":40}}}},"statementMap":{"1":{"start":{"line":5,"column":0},"end":{"line":5,"column":32}},"2":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"3":{"start":{"line":8,"column":0},"end":{"line":8,"column":31}},"4":{"start":{"line":10,"column":0},"end":{"line":56,"column":1}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":17}},"6":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"7":{"start":{"line":14,"column":4},"end":{"line":14,"column":52}},"8":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"9":{"start":{"line":21,"column":2},"end":{"line":23,"column":3}},"10":{"start":{"line":22,"column":4},"end":{"line":22,"column":40}},"11":{"start":{"line":25,"column":2},"end":{"line":27,"column":3}},"12":{"start":{"line":26,"column":4},"end":{"line":26,"column":33}},"13":{"start":{"line":32,"column":2},"end":{"line":32,"column":43}},"14":{"start":{"line":34,"column":2},"end":{"line":37,"column":3}},"15":{"start":{"line":39,"column":2},"end":{"line":41,"column":3}},"16":{"start":{"line":43,"column":2},"end":{"line":53,"column":3}},"17":{"start":{"line":44,"column":4},"end":{"line":47,"column":5}},"18":{"start":{"line":45,"column":6},"end":{"line":45,"column":21}},"19":{"start":{"line":46,"column":6},"end":{"line":46,"column":15}},"20":{"start":{"line":48,"column":4},"end":{"line":50,"column":31}},"21":{"start":{"line":49,"column":6},"end":{"line":49,"column":74}},"22":{"start":{"line":50,"column":13},"end":{"line":50,"column":30}},"23":{"start":{"line":52,"column":4},"end":{"line":52,"column":36}},"24":{"start":{"line":55,"column":2},"end":{"line":55,"column":42}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":13,"column":2}},{"start":{"line":13,"column":2},"end":{"line":13,"column":2}}]},"2":{"line":21,"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":2}},{"start":{"line":21,"column":2},"end":{"line":21,"column":2}}]},"3":{"line":25,"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":2}},{"start":{"line":25,"column":2},"end":{"line":25,"column":2}}]},"4":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"5":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":48,"column":4}},{"start":{"line":48,"column":4},"end":{"line":48,"column":4}}]}}},"/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/config.js":{"path":"/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/config.js","s":{"1":1,"2":1,"3":1},"b":{"1":[1,0]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":22}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":67}}},"branchMap":{"1":{"line":5,"type":"binary-expr","locations":[{"start":{"line":5,"column":19},"end":{"line":5,"column":40}},{"start":{"line":5,"column":44},"end":{"line":5,"column":67}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css new file mode 100644 index 0000000000..0c0571dad9 --- /dev/null +++ b/coverage/lcov-report/base.css @@ -0,0 +1,212 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px;; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } + + +.medium .chart { border:1px solid #666; } +.medium .cover-fill { background: #666; } + +.cbranch-no { background: yellow !important; color: #111; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } +.medium { background: #eaeaea; } + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html new file mode 100644 index 0000000000..1b513d36af --- /dev/null +++ b/coverage/lcov-report/index.html @@ -0,0 +1,93 @@ + + + + Code coverage report for All files + + + + + + + +
+
+

+ / +

+
+
+ 85.19% + Statements + 23/27 +
+
+ 50% + Branches + 6/12 +
+
+ 40% + Functions + 2/5 +
+
+ 85.19% + Lines + 23/27 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ipfs-core/
85.19%23/2750%6/1240%2/585.19%23/27
+
+
+ + + + + + + diff --git a/coverage/lcov-report/ipfs-core/config.js.html b/coverage/lcov-report/ipfs-core/config.js.html new file mode 100644 index 0000000000..18bb86e505 --- /dev/null +++ b/coverage/lcov-report/ipfs-core/config.js.html @@ -0,0 +1,80 @@ + + + + Code coverage report for ipfs-core/config.js + + + + + + + +
+
+

+ all files / ipfs-core/ config.js +

+
+
+ 100% + Statements + 3/3 +
+
+ 50% + Branches + 1/2 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 3/3 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +  + +  + + 
var os = require('os')
+ 
+exports = module.exports
+ 
+exports.repoPath = process.env.IPFS_PATH || os.homedir() + '/.ipfs'
+
+
+ + + + + + + diff --git a/coverage/lcov-report/ipfs-core/index.html b/coverage/lcov-report/ipfs-core/index.html new file mode 100644 index 0000000000..274be5bdea --- /dev/null +++ b/coverage/lcov-report/ipfs-core/index.html @@ -0,0 +1,106 @@ + + + + Code coverage report for ipfs-core/ + + + + + + + +
+
+

+ all files ipfs-core/ +

+
+
+ 85.19% + Statements + 23/27 +
+
+ 50% + Branches + 6/12 +
+
+ 40% + Functions + 2/5 +
+
+ 85.19% + Lines + 23/27 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
config.js
100%3/350%1/2100%0/0100%3/3
index.js
83.33%20/2450%5/1040%2/583.33%20/24
+
+
+ + + + + + + diff --git a/coverage/lcov-report/ipfs-core/index.js.html b/coverage/lcov-report/ipfs-core/index.js.html new file mode 100644 index 0000000000..1625f8ead4 --- /dev/null +++ b/coverage/lcov-report/ipfs-core/index.js.html @@ -0,0 +1,233 @@ + + + + Code coverage report for ipfs-core/index.js + + + + + + + +
+
+

+ all files / ipfs-core/ index.js +

+
+
+ 83.33% + Statements + 20/24 +
+
+ 50% + Branches + 5/10 +
+
+ 40% + Functions + 2/5 +
+
+ 83.33% + Lines + 20/24 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57  +  +  +  + + +  + +  + + +  + +  +  +  + +  +  +  + +  +  +  + +  +  +  +  +  +  + +  + +  +  +  +  + +  +  +  + + + + +  + +  + +  + +  +  + +  + 
// var ipfsAPIclt = require('ipfs-api')
+// var extend = require('extend')
+// var PeerId = require('peer-id')
+// var PeerInfo = require('peer-info')
+var config = require('./config')
+var IPFSRepo = require('ipfs-repo')
+ 
+exports = module.exports = IPFS
+ 
+function IPFS () {
+  var self = this
+ 
+  Iif (!(self instanceof IPFS)) {
+    throw new Error('Must be instantiated with new')
+  }
+ 
+  var opts = {
+    url: 'public-writable-node'
+  }
+ 
+  Iif (process.env.NODE_ENV === 'dev') {
+    opts.url = '/ip4/127.0.0.1/tcp/5001'
+  }
+ 
+  Iif (process.env.NODE_ENV === 'test') {
+    opts.url = process.env.APIURL
+  }
+ 
+  // var api = ipfsAPIclt(config.url)
+  // extend(self, api)
+ 
+  self.repo = new IPFSRepo(config.repoPath)
+ 
+  self.init = function (bits, force, empty, callback) {
+    // 1. check if repo already exists
+ 
+  }
+ 
+  self.daemon = function (callback) {
+    // 1. read repo to get peer data
+  }
+ 
+  self.version = function (opts, callback) {
+    Eif (typeof opts === 'function') {
+      callback = opts
+      opts = {}
+    }
+    Iif (!self.repo.exists()) {
+      callback(new Error('Repo does not exist, you must init repo first'))
+    } else { self.repo.load() }
+ 
+    self.repo.version.read(callback)
+  }
+ 
+  self.id = function (format, callback) {}
+}
+ 
+
+
+ + + + + + + diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css new file mode 100644 index 0000000000..b317a7cda3 --- /dev/null +++ b/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js new file mode 100644 index 0000000000..ef51e03866 --- /dev/null +++ b/coverage/lcov-report/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..03f704a609c6fd0dbfdac63466a7d7c958b5cbf3 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function (a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function (a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function () { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i =0 ; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function () { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(cols); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/coverage/lcov.info b/coverage/lcov.info new file mode 100644 index 0000000000..927835bc16 --- /dev/null +++ b/coverage/lcov.info @@ -0,0 +1,67 @@ +TN: +SF:/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/index.js +FN:10,IPFS +FN:34,(anonymous_2) +FN:39,(anonymous_3) +FN:43,(anonymous_4) +FN:55,(anonymous_5) +FNF:5 +FNH:2 +FNDA:1,IPFS +FNDA:0,(anonymous_2) +FNDA:0,(anonymous_3) +FNDA:1,(anonymous_4) +FNDA:0,(anonymous_5) +DA:5,1 +DA:6,1 +DA:8,1 +DA:10,1 +DA:11,1 +DA:13,1 +DA:14,0 +DA:17,1 +DA:21,1 +DA:22,0 +DA:25,1 +DA:26,0 +DA:32,1 +DA:34,1 +DA:39,1 +DA:43,1 +DA:44,1 +DA:45,1 +DA:46,1 +DA:48,1 +DA:49,0 +DA:50,1 +DA:52,1 +DA:55,1 +LF:24 +LH:20 +BRDA:13,1,0,0 +BRDA:13,1,1,1 +BRDA:21,2,0,0 +BRDA:21,2,1,1 +BRDA:25,3,0,0 +BRDA:25,3,1,1 +BRDA:44,4,0,1 +BRDA:44,4,1,0 +BRDA:48,5,0,0 +BRDA:48,5,1,1 +BRF:10 +BRH:5 +end_of_record +TN: +SF:/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/config.js +FNF:0 +FNH:0 +DA:1,1 +DA:3,1 +DA:5,1 +LF:3 +LH:3 +BRDA:5,1,0,1 +BRDA:5,1,1,0 +BRF:2 +BRH:1 +end_of_record diff --git a/package.json b/package.json index 5725621d0f..9d9461ba87 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,13 @@ "version": "0.0.0", "description": "JavaScript implementation of the IPFS specification", "bin": { - "jsipfs": "bin.js" + "jsipfs": "src/cli/bin.js" }, "main": "src/index.js", "scripts": { - "test:node": "node tests/jsipfs-test.js", "lint": "standard", - "test": "npm run test:node" + "coverage": "istanbul cover --print both -- _mocha tests/*-test.js", + "test": "mocha tests/*-test.js" }, "pre-commit": [ "lint" @@ -28,14 +28,21 @@ }, "homepage": "https://github.com/ipfs/js-ipfs#readme", "devDependencies": { + "chai": "^3.4.1", "ipfsd-ctl": "^0.6.1", + "istanbul": "^0.4.1", + "mocha": "^2.3.4", + "ncp": "^2.0.0", "pre-commit": "^1.1.2", + "rimraf": "^2.4.4", "standard": "^5.3.1" }, "dependencies": { "hapi": "^11.1.2", "ipfs-api": "^2.7.0", - "ronin": "^0.3.11", - "vinyl": "^0.5.1" + "ipfs-repo": "^0.1.0", + "peer-id": "^0.4.0", + "peer-info": "^0.4.0", + "ronin": "^0.3.11" } } diff --git a/bin.js b/src/cli/bin.js similarity index 55% rename from bin.js rename to src/cli/bin.js index 3dcf9c8e0a..05885ce332 100755 --- a/bin.js +++ b/src/cli/bin.js @@ -4,6 +4,8 @@ var ronin = require('ronin') var cli = ronin(__dirname) -cli.autoupdate(function () { - cli.run() -}) +cli.run() + +// cli.autoupdate(function () { +// cli.run() +// }) diff --git a/commands/add.js b/src/cli/commands/add.js similarity index 100% rename from commands/add.js rename to src/cli/commands/add.js diff --git a/commands/cat.js b/src/cli/commands/cat.js similarity index 100% rename from commands/cat.js rename to src/cli/commands/cat.js diff --git a/commands/commands.js b/src/cli/commands/commands.js similarity index 100% rename from commands/commands.js rename to src/cli/commands/commands.js diff --git a/commands/daemon.js b/src/cli/commands/daemon.js similarity index 100% rename from commands/daemon.js rename to src/cli/commands/daemon.js diff --git a/commands/dns.js b/src/cli/commands/dns.js similarity index 100% rename from commands/dns.js rename to src/cli/commands/dns.js diff --git a/commands/get.js b/src/cli/commands/get.js similarity index 100% rename from commands/get.js rename to src/cli/commands/get.js diff --git a/commands/id.js b/src/cli/commands/id.js similarity index 100% rename from commands/id.js rename to src/cli/commands/id.js diff --git a/commands/init.js b/src/cli/commands/init.js similarity index 100% rename from commands/init.js rename to src/cli/commands/init.js diff --git a/commands/ls.js b/src/cli/commands/ls.js similarity index 100% rename from commands/ls.js rename to src/cli/commands/ls.js diff --git a/commands/mount.js b/src/cli/commands/mount.js similarity index 100% rename from commands/mount.js rename to src/cli/commands/mount.js diff --git a/commands/ping.js b/src/cli/commands/ping.js similarity index 100% rename from commands/ping.js rename to src/cli/commands/ping.js diff --git a/commands/refs.js b/src/cli/commands/refs.js similarity index 100% rename from commands/refs.js rename to src/cli/commands/refs.js diff --git a/commands/resolve.js b/src/cli/commands/resolve.js similarity index 100% rename from commands/resolve.js rename to src/cli/commands/resolve.js diff --git a/commands/update.js b/src/cli/commands/update.js similarity index 100% rename from commands/update.js rename to src/cli/commands/update.js diff --git a/commands/version.js b/src/cli/commands/version.js similarity index 100% rename from commands/version.js rename to src/cli/commands/version.js diff --git a/src/ipfs-core/config.js b/src/ipfs-core/config.js new file mode 100644 index 0000000000..1bcfce9dd7 --- /dev/null +++ b/src/ipfs-core/config.js @@ -0,0 +1,5 @@ +var os = require('os') + +exports = module.exports + +exports.repoPath = process.env.IPFS_PATH || os.homedir() + '/.ipfs' diff --git a/src/ipfs-core/index.js b/src/ipfs-core/index.js index bf11c58245..9f64353905 100644 --- a/src/ipfs-core/index.js +++ b/src/ipfs-core/index.js @@ -1,5 +1,9 @@ -var ipfsAPIclt = require('ipfs-api') -var extend = require('extend') +// var ipfsAPIclt = require('ipfs-api') +// var extend = require('extend') +// var PeerId = require('peer-id') +// var PeerInfo = require('peer-info') +var config = require('./config') +var IPFSRepo = require('ipfs-repo') exports = module.exports = IPFS @@ -10,22 +14,43 @@ function IPFS () { throw new Error('Must be instantiated with new') } - var config = { + var opts = { url: 'public-writable-node' } if (process.env.NODE_ENV === 'dev') { - config.url = '/ip4/127.0.0.1/tcp/5001' + opts.url = '/ip4/127.0.0.1/tcp/5001' } if (process.env.NODE_ENV === 'test') { - config.url = process.env.APIURL + opts.url = process.env.APIURL } - var api = ipfsAPIclt(config.url) - extend(self, api) + // var api = ipfsAPIclt(config.url) + // extend(self, api) - self.init = function (bits, force, empty) { - throw new Error('Not available yet') + self.repo = new IPFSRepo(config.repoPath) + + self.init = function (bits, force, empty, callback) { + // 1. check if repo already exists + + } + + self.daemon = function (callback) { + // 1. read repo to get peer data } + + self.version = function (opts, callback) { + if (typeof opts === 'function') { + callback = opts + opts = {} + } + if (!self.repo.exists()) { + callback(new Error('Repo does not exist, you must init repo first')) + } else { self.repo.load() } + + self.repo.version.read(callback) + } + + self.id = function (format, callback) {} } diff --git a/tests/jsipfs-test.js b/tests/jsipfs-test.js new file mode 100644 index 0000000000..1f7d7f9533 --- /dev/null +++ b/tests/jsipfs-test.js @@ -0,0 +1,49 @@ +/* globals describe, before, after, it*/ + +var expect = require('chai').expect +var ncp = require('ncp').ncp +var rimraf = require('rimraf') + +// var IPFS = require('../src/ipfs-core') + +describe('IPFS Repo Tests', function () { + var testRepoPath = __dirname + '/test-repo' + var date = Date.now().toString() + var repoPath = testRepoPath + date + var node + + before(function (done) { + ncp(testRepoPath, repoPath, function (err) { + if (err) { + expect(err).to.equal(null) + } + done() + }) + }) + + after(function (done) { + rimraf(repoPath, function (err) { + if (err) { + expect(err).to.equal(null) + } + done() + }) + }) + + it('start a new node', function (done) { + process.env.IPFS_PATH = repoPath + var IPFS = require('../src/ipfs-core') + + node = new IPFS() + done() + }) + + it('check node version', function (done) { + node.version(function (err, version) { + expect(err).to.equal(null) + expect(version).to.be.a('string') + expect(Number(version)).to.be.a('number') + done() + }) + }) +}) diff --git a/tests/test-repo/blocks/1220120f/1220120f6af601d46e10b2d2e11ed71c55d25f3042c22501e41d1246e7a1e9d3d8ec.data b/tests/test-repo/blocks/1220120f/1220120f6af601d46e10b2d2e11ed71c55d25f3042c22501e41d1246e7a1e9d3d8ec.data new file mode 100644 index 0000000000..389e111776 --- /dev/null +++ b/tests/test-repo/blocks/1220120f/1220120f6af601d46e10b2d2e11ed71c55d25f3042c22501e41d1246e7a1e9d3d8ec.data @@ -0,0 +1,28 @@ + +Hello and Welcome to IPFS! + +██╗██████╗ ███████╗███████╗ +██║██╔══██╗██╔════╝██╔════╝ +██║██████╔╝█████╗ ███████╗ +██║██╔═══╝ ██╔══╝ ╚════██║ +██║██║ ██║ ███████║ +╚═╝╚═╝ ╚═╝ ╚══════╝ + +If you're seeing this, you have successfully installed +IPFS and are now interfacing with the ipfs merkledag! + + ------------------------------------------------------- +| Warning: | +| This is alpha software. Use at your own discretion! | +| Much is missing or lacking polish. There are bugs. | +| Not yet secure. Read the security notes for more. | + ------------------------------------------------------- + +Check out some of the other files in this directory: + + ./about + ./help + ./quick-start <-- usage examples + ./readme <-- this file + ./security-notes + \ No newline at end of file diff --git a/tests/test-repo/blocks/122031d6/122031d6da265092f1b03fec969243fdcf095c1d219356cdf538ffce705a52d5738d.data b/tests/test-repo/blocks/122031d6/122031d6da265092f1b03fec969243fdcf095c1d219356cdf538ffce705a52d5738d.data new file mode 100644 index 0000000000000000000000000000000000000000..5ea0edda6f82982c276a4a3813a50c0e35121c68 GIT binary patch literal 10765 zcmeIzF%AJy6a~;Rm3)!Nk3xb(CK9$mt(wFR^jf72s6=9D)srdd6*gc6EI~I4+fbbT zRX6Y66Q?1IqgQpGAHRd{ss22Q^=&*UXYbW{zqlNV{wBXJW712aODXvf?XV11kq9)T zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*;U8!iTA|tK KY}4Vho$h|}9P~&4 literal 0 HcmV?d00001 diff --git a/tests/test-repo/blocks/122031e7/122031e7a41c15d03feb8cd793c3348ea3b310512d7767a9abfbd7a928a85e977173.data b/tests/test-repo/blocks/122031e7/122031e7a41c15d03feb8cd793c3348ea3b310512d7767a9abfbd7a928a85e977173.data new file mode 100644 index 0000000000..ecce1053f6 --- /dev/null +++ b/tests/test-repo/blocks/122031e7/122031e7a41c15d03feb8cd793c3348ea3b310512d7767a9abfbd7a928a85e977173.data @@ -0,0 +1,4 @@ +5 +" ׾F_uؔlzS?|ڲPc@ js-ipfs-repo + + \ No newline at end of file diff --git a/tests/test-repo/blocks/12203628/12203628a4a19525dd84bbbffe132ec0b0d3be3528fbbcc814feb7f2fbf71ca06162.data b/tests/test-repo/blocks/12203628/12203628a4a19525dd84bbbffe132ec0b0d3be3528fbbcc814feb7f2fbf71ca06162.data new file mode 100644 index 0000000000000000000000000000000000000000..bbe6bda78d0a52f6d87da578f452d43718b9aa9f GIT binary patch literal 10807 zcmeI&tqQ_m6vpvsQC>mhU=TmxWeCpZ4H&eDU=nNw5wR?6Yue0K5w>X*qZns5SS{Xw z-hn1RK)egXzn^qC&+{usEMq~6w(px+ cb8FMhello + ipfs add hello + + +View it: + + ipfs cat + + +Try a directory: + + mkdir foo + mkdir foo/bar + echo "baz" > foo/baz + echo "baz" > foo/bar/baz + ipfs add -r foo + + +View things: + + ipfs ls + ipfs ls /bar + ipfs cat /baz + ipfs cat /bar/baz + ipfs cat /bar + ipfs ls /baz + + +References: + + ipfs refs + ipfs refs -r + ipfs refs --help + + +Get: + + ipfs get foo2 + diff foo foo2 + + +Objects: + + ipfs object get + ipfs object get /foo2 + ipfs object --help + + +Pin + GC: + + ipfs pin -r + ipfs gc + ipfs ls + ipfs unpin -r + ipfs gc + + +Daemon: + + ipfs daemon (in another terminal) + ipfs id + + +Network: + + (must be online) + ipfs swarm peers + ipfs id + ipfs cat + + +Mount: + + (warning: fuse is finicky!) + ipfs mount + cd /ipfs/< + + +Tool: + + ipfs version + ipfs update + ipfs commands + ipfs config --help + open http://localhost:5001/webui + + +Browse: + + webui: + + http://localhost:5001/webui + + video: + + http://localhost:8080/ipfs/QmVc6zuAneKJzicnJpfrqCH9gSy6bz54JhcypfJYhGUFQu/play#/ipfs/QmTKZgRNwDNZwHtJSjCp6r5FYefzpULfy37JvMt9DwvXse + + images: + + http://localhost:8080/ipfs/QmZpc3HvfjEXvLWGQPWbHk3AjD5j8NEN4gmFN8Jmrd5g83/cs + + markdown renderer app: + + http://localhost:8080/ipfs/QmX7M9CiYXjVeFnkfVGf3y5ixTZ2ACeSGyL1vBJY1HvQPp/mdown + \ No newline at end of file diff --git a/tests/test-repo/blocks/12206781/122067817186b8ff365c758f387e3ae7f28fa9367ee167c312e6d65a2e02e81ab815.data b/tests/test-repo/blocks/12206781/122067817186b8ff365c758f387e3ae7f28fa9367ee167c312e6d65a2e02e81ab815.data new file mode 100644 index 0000000000000000000000000000000000000000..a8f98693b7d4797d0a55704b16c15a6aa7d34bd5 GIT binary patch literal 10765 zcmeIzF%AJy6a~Szz&}ww{ J&EYejEr0X~^v?hQ literal 0 HcmV?d00001 diff --git a/tests/test-repo/blocks/12207028/122070286b9afa6620a66f715c7020d68af3d10e1a497971629c07606bfdb812303d.data b/tests/test-repo/blocks/12207028/122070286b9afa6620a66f715c7020d68af3d10e1a497971629c07606bfdb812303d.data new file mode 100644 index 0000000000000000000000000000000000000000..74de75af616ff437b5c7a3a5272281eac2146b6c GIT binary patch literal 309 zcmWgA<5Ch*SgK>j#LTl(=mjz6J*Z#Z`mUeibke1%>*qt`A@ymo*6O-~wOC)CS z3K@XZPnu<5V|lBKJN>}4>2CTNRSd^0_H1qVw~ozKk4Ii%i@p$ha(-S(VseSZ2}U7Z zkd6rls>-Jxlr$AsHtpiyKm2l@?&p6zQA*^T_KfrP>FKF6gjh0Ca|$F5F$tM~lqa2& z*O|D`YWmh`FN(J=HpxnHW4)f}dn)*>RpfVzsIJ{Y+=Zo?$=SNaC5c5P5({~S^g+6W z__Mw-Uda>Kbm^hob(zph@di$ZR2iSh3b{RB`110NH$rShsfj7MsS@Wngv>!2f{xjg zms)1qHyyK_UR9)g=w{aZf~|kMWdrSdqBHNTyCTF_oSIx(lvz@#o0ngbS}f7b!NtVE F2moEFc%uLS literal 0 HcmV?d00001 diff --git a/tests/test-repo/blocks/1220709b/1220709b2dcc5f6a90ad64d6fe3a5d202a72b057d1c7f2e682d0776a5363e2cca974.data b/tests/test-repo/blocks/1220709b/1220709b2dcc5f6a90ad64d6fe3a5d202a72b057d1c7f2e682d0776a5363e2cca974.data new file mode 100644 index 0000000000..3a99c365f0 --- /dev/null +++ b/tests/test-repo/blocks/1220709b/1220709b2dcc5f6a90ad64d6fe3a5d202a72b057d1c7f2e682d0776a5363e2cca974.data @@ -0,0 +1,3 @@ +4 +" Y9_)a˹2RmŖke9 js-ipfs-repo + \ No newline at end of file diff --git a/tests/test-repo/blocks/12207fb8/12207fb898b5d7be46d85feb75d894e16cfa9a7ae5533f8e997cdab2ebadd7506340.data b/tests/test-repo/blocks/12207fb8/12207fb898b5d7be46d85feb75d894e16cfa9a7ae5533f8e997cdab2ebadd7506340.data new file mode 100644 index 0000000000..ee87b9db01 --- /dev/null +++ b/tests/test-repo/blocks/12207fb8/12207fb898b5d7be46d85feb75d894e16cfa9a7ae5533f8e997cdab2ebadd7506340.data @@ -0,0 +1,4 @@ +0 +" ,Qv3k>\IzxEElM/fLICENSE1 +" JZXoRX!Fwd87U;SöWw README.md{ + \ No newline at end of file diff --git a/tests/test-repo/blocks/12208b87/12208b872ca4ee517608331696dd6b3e5cf3497a7845ee8f94456ccf4d1d2f6602b5.data b/tests/test-repo/blocks/12208b87/12208b872ca4ee517608331696dd6b3e5cf3497a7845ee8f94456ccf4d1d2f6602b5.data new file mode 100644 index 0000000000..3da92595c2 --- /dev/null +++ b/tests/test-repo/blocks/12208b87/12208b872ca4ee517608331696dd6b3e5cf3497a7845ee8f94456ccf4d1d2f6602b5.data @@ -0,0 +1,24 @@ + +The MIT License (MIT) + +Copyright (c) 2015 IPFS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + \ No newline at end of file diff --git a/tests/test-repo/blocks/122090c0/122090c07a7795c1193510a696d1fdfc0f1e4947cff8e422610996e609dbcb976598.data b/tests/test-repo/blocks/122090c0/122090c07a7795c1193510a696d1fdfc0f1e4947cff8e422610996e609dbcb976598.data new file mode 100644 index 0000000000..71be805f1e --- /dev/null +++ b/tests/test-repo/blocks/122090c0/122090c07a7795c1193510a696d1fdfc0f1e4947cff8e422610996e609dbcb976598.data @@ -0,0 +1,9 @@ + +Some helpful resources for finding your way around ipfs: + +- quick-start: a quick show of various ipfs features. +- ipfs commands: a list of all commands +- ipfs --help: every command describes itself +- https://github.com/ipfs/go-ipfs -- the src repository +- #ipfs on irc.freenode.org -- the community irc channel + \ No newline at end of file diff --git a/tests/test-repo/blocks/1220929a/1220929a303c39da8a0b67c09697462f687a00c638bcb580feae06452e0c1f20b4.data b/tests/test-repo/blocks/1220929a/1220929a303c39da8a0b67c09697462f687a00c638bcb580feae06452e0c1f20b4.data new file mode 100644 index 0000000000..62d1c2979b --- /dev/null +++ b/tests/test-repo/blocks/1220929a/1220929a303c39da8a0b67c09697462f687a00c638bcb580feae06452e0c1f20b4.data @@ -0,0 +1,8 @@ + +Come hang out in our IRC chat room if you have any questions. + +Contact the ipfs dev team: +- Bugs: https://github.com/ipfs/go-ipfs/issues +- Help: irc.freenode.org/#ipfs +- Email: dev@ipfs.io + \ No newline at end of file diff --git a/tests/test-repo/blocks/1220933b/1220933b41d37fd4508cdff45930dff56baef91c7dc345e73d049ab570abe10dfbb9.data b/tests/test-repo/blocks/1220933b/1220933b41d37fd4508cdff45930dff56baef91c7dc345e73d049ab570abe10dfbb9.data new file mode 100644 index 0000000000000000000000000000000000000000..d899663bf7a13bb0563304b1d96985a784c2d515 GIT binary patch literal 10849 zcmWgA;8GG&c)a0=(~LhdBC~#fIWaSTr;7SI$0sSXC;Kd!I#aqLXh*0Jg9L-nsLIh$ z8ciXixns0s7%de?YlP9-aI`iYtqn(O!_nGsv^E^A4M%Ik(b{mdHXN-DM{C2;+HkZs z9IXvUYs1mnaI`iYtqn(O!_nGsv^E^A4M%Ik(b{mdHXN-DM{C2;+HkZs9IXvUYs1mn zaI`iYG__&mlom_2c+JFlUxXS??=;#MbToJ7(P`PK4+MoQKg`(u9` +- browsers or extensions can learn to use `ipfs://` directly +- hash-addressed content guarantees authenticity + +IPFS is modular: +- connection layer over any network protocol +- routing layer +- uses a routing layer DHT (kademlia/coral) +- uses a path-based naming service +- uses bittorrent-inspired block exchange + +IPFS uses crypto: +- cryptographic-hash content addressing +- block-level deduplication +- file integrity + versioning +- filesystem-level encryption + signing support + +IPFS is p2p: +- worldwide peer-to-peer file transfers +- completely decentralized architecture +- **no** central point of failure + +IPFS is a cdn: +- add a file to the filesystem locally, and it's now available to the world +- caching-friendly (content-hash naming) +- bittorrent-based bandwidth distribution + +IPFS has a name service: +- IPNS, an SFS inspired name system +- global namespace based on PKI +- serves to build trust chains +- compatible with other NSes +- can map DNS, .onion, .bit, etc to IPNS + \ No newline at end of file diff --git a/tests/test-repo/blocks/1220c0fc/1220c0fc6b49543d7bf04e83d2a5a7cbe72a83e80f9c7bca1abcaa42298a57a33ff5.data b/tests/test-repo/blocks/1220c0fc/1220c0fc6b49543d7bf04e83d2a5a7cbe72a83e80f9c7bca1abcaa42298a57a33ff5.data new file mode 100644 index 0000000000000000000000000000000000000000..c9885c45d7e7c10d02b98208d40cfd7b8bfaed21 GIT binary patch literal 101 zcmWgA=TZ_+Kwo-;;PadOz%uNME$6+{JHE$$U!OUW!sO)in> z4G}T|X$WFClbv7rFrua5=1<0)Q}=J#b|1g=FJWY200SX~$SEzBZ1I|j^S%f*oZe})FX(9Q%%jt? zQy&NlS$>$Y`#n34QbA^3F(V^P!?OjhZT>&P<~cuU%i;RLe(ysy@1_qD4Q&dq4R$uX zbPxoo11sKKRu>QF9Qd?w0|O_M0pouNU?_u2-8}VndNoG}qZmkp00{rx(5+JHej5PO CoIXSV literal 0 HcmV?d00001 diff --git a/tests/test-repo/datastore/000005.ldb b/tests/test-repo/datastore/000005.ldb new file mode 100644 index 0000000000000000000000000000000000000000..63d9d260b936415ee42b5aeda6c79fb941664398 GIT binary patch literal 1120 zcmZQDSjViNS&&z(FQg!8*qs;0^V3RMWIveo0t|Brg#j3VRkisv@!=|IgJvNC_dNx9y@%e`@arzW`upR#0^RR3Lu1P3 zgny1+s9JOHtH$|N^V2^pIaU+*`j0Vdf^UEA=Y(L*NL7==e45ubJUDbI<}5@1nZ5i@ zU-f@onB_6=BHQa-tVc_VRZiT0AST5ib<){%%1r}PkJe@8+6(<3{`CFeMP?prC*c znwwdgM`+7O$B&?~72w>77RV zf{y0SJUT5q^?{&}<%b!&-?Q^56=dcWGqS)myonCBGLo1n?_9oP$D!cvsdqIm%dJT< zUeCYn&kfrf>=lfOBoQtW6k&$7W$0~c7gOL@IORq4N$7y_CFLmFs-1D4yKkEePa;Yx&V3}9e z6J;wFzbL(7XX!B6*Rdrw=+4dxeU2>!j1QaGe>~sK(>yOETD?v4ss5$s3VXC14~0|~ z@|s=JZrGS)y@`hY)f%XfBnQv@ZgL4too7C-W6;9@lKgp&)Y9xu#YGC zq+Q(oPkf)J&zo^7bJ>~t)Xqs~*IU@HQqP#^{d0FztkiZ*y~k%OjhiRCYiY>$1@7+Z zzc{J2k%`0O*2zuI)9>zn)wWdsh9cXQc|w1;OnM=;)%wQi`6UM;Jtuj8n*Q?qk;X3q zZaf<6!(B7;zLu#kRKLAQM`r(FbFXM+CT2zkqS6H@{24)n$QSJzIOo8pg&P<+nGG2K hLjXe)2VAZvSyQK-gJTMZI7kRT2>;#Cty1cK8vstu!bkuB literal 0 HcmV?d00001 diff --git a/tests/test-repo/datastore/CURRENT b/tests/test-repo/datastore/CURRENT new file mode 100644 index 0000000000..875cf23355 --- /dev/null +++ b/tests/test-repo/datastore/CURRENT @@ -0,0 +1 @@ +MANIFEST-000007 diff --git a/tests/test-repo/datastore/LOCK b/tests/test-repo/datastore/LOCK new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/test-repo/datastore/LOG b/tests/test-repo/datastore/LOG new file mode 100644 index 0000000000..863b68fd57 --- /dev/null +++ b/tests/test-repo/datastore/LOG @@ -0,0 +1,10 @@ +=============== Dec 10, 2015 (PST) =============== +07:50:02.056578 log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed +07:50:02.057231 db@open opening +07:50:02.057312 journal@recovery F·1 +07:50:02.057514 journal@recovery recovering @3 +07:50:02.058921 mem@flush created L0@5 N·4 S·1KiB "/ip..\xf6\xe4\xa9,v5":"/pk..\xf6\xe4\xa9,v6" +07:50:02.059983 db@janitor F·4 G·0 +07:50:02.060001 db@open done T·2.755926ms +07:50:02.073183 db@close closing +07:50:02.073285 db@close done T·97.522µs diff --git a/tests/test-repo/datastore/LOG.old b/tests/test-repo/datastore/LOG.old new file mode 100644 index 0000000000..708351e772 --- /dev/null +++ b/tests/test-repo/datastore/LOG.old @@ -0,0 +1,10 @@ +=============== Dec 10, 2015 (PST) =============== +07:49:57.048841 log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed +07:49:57.049014 db@open opening +07:49:57.049066 journal@recovery F·1 +07:49:57.049233 journal@recovery recovering @1 +07:49:57.049693 mem@flush created L0@2 N·2 S·211B "/lo..oot,v2":"/lo..ins,v1" +07:49:57.050381 db@janitor F·3 G·0 +07:49:57.050397 db@open done T·1.375431ms +07:49:57.064580 db@close closing +07:49:57.064655 db@close done T·72.59µs diff --git a/tests/test-repo/datastore/MANIFEST-000007 b/tests/test-repo/datastore/MANIFEST-000007 new file mode 100644 index 0000000000000000000000000000000000000000..6af3b5450fb46c2d16258f242969f0d88dfa5892 GIT binary patch literal 293 zcmbOjutG$Rk&#g Date: Thu, 10 Dec 2015 11:26:10 -0800 Subject: [PATCH 13/16] remove coverage report folder --- .gitignore | 29 +++ coverage/coverage.json | 1 - coverage/lcov-report/base.css | 212 ---------------- coverage/lcov-report/index.html | 93 ------- coverage/lcov-report/ipfs-core/config.js.html | 80 ------ coverage/lcov-report/ipfs-core/index.html | 106 -------- coverage/lcov-report/ipfs-core/index.js.html | 233 ------------------ coverage/lcov-report/prettify.css | 1 - coverage/lcov-report/prettify.js | 1 - coverage/lcov-report/sort-arrow-sprite.png | Bin 209 -> 0 bytes coverage/lcov-report/sorter.js | 158 ------------ coverage/lcov.info | 67 ----- 12 files changed, 29 insertions(+), 952 deletions(-) delete mode 100644 coverage/coverage.json delete mode 100644 coverage/lcov-report/base.css delete mode 100644 coverage/lcov-report/index.html delete mode 100644 coverage/lcov-report/ipfs-core/config.js.html delete mode 100644 coverage/lcov-report/ipfs-core/index.html delete mode 100644 coverage/lcov-report/ipfs-core/index.js.html delete mode 100644 coverage/lcov-report/prettify.css delete mode 100644 coverage/lcov-report/prettify.js delete mode 100644 coverage/lcov-report/sort-arrow-sprite.png delete mode 100644 coverage/lcov-report/sorter.js delete mode 100644 coverage/lcov.info diff --git a/.gitignore b/.gitignore index 0af00ca9e8..4d18d56eb7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,31 @@ **/node_modules/ **/*.log + +# Logs +logs +*.log + +coverage + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +build + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules diff --git a/coverage/coverage.json b/coverage/coverage.json deleted file mode 100644 index 3884448090..0000000000 --- a/coverage/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/index.js":{"path":"/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/index.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":0,"8":1,"9":1,"10":0,"11":1,"12":0,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":0,"22":1,"23":1,"24":1},"b":{"1":[0,1],"2":[0,1],"3":[0,1],"4":[1,0],"5":[0,1]},"f":{"1":1,"2":0,"3":0,"4":1,"5":0},"fnMap":{"1":{"name":"IPFS","line":10,"loc":{"start":{"line":10,"column":0},"end":{"line":10,"column":17}}},"2":{"name":"(anonymous_2)","line":34,"loc":{"start":{"line":34,"column":14},"end":{"line":34,"column":54}}},"3":{"name":"(anonymous_3)","line":39,"loc":{"start":{"line":39,"column":16},"end":{"line":39,"column":36}}},"4":{"name":"(anonymous_4)","line":43,"loc":{"start":{"line":43,"column":17},"end":{"line":43,"column":43}}},"5":{"name":"(anonymous_5)","line":55,"loc":{"start":{"line":55,"column":12},"end":{"line":55,"column":40}}}},"statementMap":{"1":{"start":{"line":5,"column":0},"end":{"line":5,"column":32}},"2":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"3":{"start":{"line":8,"column":0},"end":{"line":8,"column":31}},"4":{"start":{"line":10,"column":0},"end":{"line":56,"column":1}},"5":{"start":{"line":11,"column":2},"end":{"line":11,"column":17}},"6":{"start":{"line":13,"column":2},"end":{"line":15,"column":3}},"7":{"start":{"line":14,"column":4},"end":{"line":14,"column":52}},"8":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"9":{"start":{"line":21,"column":2},"end":{"line":23,"column":3}},"10":{"start":{"line":22,"column":4},"end":{"line":22,"column":40}},"11":{"start":{"line":25,"column":2},"end":{"line":27,"column":3}},"12":{"start":{"line":26,"column":4},"end":{"line":26,"column":33}},"13":{"start":{"line":32,"column":2},"end":{"line":32,"column":43}},"14":{"start":{"line":34,"column":2},"end":{"line":37,"column":3}},"15":{"start":{"line":39,"column":2},"end":{"line":41,"column":3}},"16":{"start":{"line":43,"column":2},"end":{"line":53,"column":3}},"17":{"start":{"line":44,"column":4},"end":{"line":47,"column":5}},"18":{"start":{"line":45,"column":6},"end":{"line":45,"column":21}},"19":{"start":{"line":46,"column":6},"end":{"line":46,"column":15}},"20":{"start":{"line":48,"column":4},"end":{"line":50,"column":31}},"21":{"start":{"line":49,"column":6},"end":{"line":49,"column":74}},"22":{"start":{"line":50,"column":13},"end":{"line":50,"column":30}},"23":{"start":{"line":52,"column":4},"end":{"line":52,"column":36}},"24":{"start":{"line":55,"column":2},"end":{"line":55,"column":42}}},"branchMap":{"1":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":13,"column":2}},{"start":{"line":13,"column":2},"end":{"line":13,"column":2}}]},"2":{"line":21,"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":2}},{"start":{"line":21,"column":2},"end":{"line":21,"column":2}}]},"3":{"line":25,"type":"if","locations":[{"start":{"line":25,"column":2},"end":{"line":25,"column":2}},{"start":{"line":25,"column":2},"end":{"line":25,"column":2}}]},"4":{"line":44,"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":44,"column":4}},{"start":{"line":44,"column":4},"end":{"line":44,"column":4}}]},"5":{"line":48,"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":48,"column":4}},{"start":{"line":48,"column":4},"end":{"line":48,"column":4}}]}}},"/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/config.js":{"path":"/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/config.js","s":{"1":1,"2":1,"3":1},"b":{"1":[1,0]},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":22}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":67}}},"branchMap":{"1":{"line":5,"type":"binary-expr","locations":[{"start":{"line":5,"column":19},"end":{"line":5,"column":40}},{"start":{"line":5,"column":44},"end":{"line":5,"column":67}}]}}}} \ No newline at end of file diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css deleted file mode 100644 index 0c0571dad9..0000000000 --- a/coverage/lcov-report/base.css +++ /dev/null @@ -1,212 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px;; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } - - -.medium .chart { border:1px solid #666; } -.medium .cover-fill { background: #666; } - -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } -.medium { background: #eaeaea; } - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html deleted file mode 100644 index 1b513d36af..0000000000 --- a/coverage/lcov-report/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - Code coverage report for All files - - - - - - - -
-
-

- / -

-
-
- 85.19% - Statements - 23/27 -
-
- 50% - Branches - 6/12 -
-
- 40% - Functions - 2/5 -
-
- 85.19% - Lines - 23/27 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
ipfs-core/
85.19%23/2750%6/1240%2/585.19%23/27
-
-
- - - - - - - diff --git a/coverage/lcov-report/ipfs-core/config.js.html b/coverage/lcov-report/ipfs-core/config.js.html deleted file mode 100644 index 18bb86e505..0000000000 --- a/coverage/lcov-report/ipfs-core/config.js.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - Code coverage report for ipfs-core/config.js - - - - - - - -
-
-

- all files / ipfs-core/ config.js -

-
-
- 100% - Statements - 3/3 -
-
- 50% - Branches - 1/2 -
-
- 100% - Functions - 0/0 -
-
- 100% - Lines - 3/3 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -  - -  - - 
var os = require('os')
- 
-exports = module.exports
- 
-exports.repoPath = process.env.IPFS_PATH || os.homedir() + '/.ipfs'
-
-
- - - - - - - diff --git a/coverage/lcov-report/ipfs-core/index.html b/coverage/lcov-report/ipfs-core/index.html deleted file mode 100644 index 274be5bdea..0000000000 --- a/coverage/lcov-report/ipfs-core/index.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - Code coverage report for ipfs-core/ - - - - - - - -
-
-

- all files ipfs-core/ -

-
-
- 85.19% - Statements - 23/27 -
-
- 50% - Branches - 6/12 -
-
- 40% - Functions - 2/5 -
-
- 85.19% - Lines - 23/27 -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
config.js
100%3/350%1/2100%0/0100%3/3
index.js
83.33%20/2450%5/1040%2/583.33%20/24
-
-
- - - - - - - diff --git a/coverage/lcov-report/ipfs-core/index.js.html b/coverage/lcov-report/ipfs-core/index.js.html deleted file mode 100644 index 1625f8ead4..0000000000 --- a/coverage/lcov-report/ipfs-core/index.js.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - Code coverage report for ipfs-core/index.js - - - - - - - -
-
-

- all files / ipfs-core/ index.js -

-
-
- 83.33% - Statements - 20/24 -
-
- 50% - Branches - 5/10 -
-
- 40% - Functions - 2/5 -
-
- 83.33% - Lines - 20/24 -
-
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57  -  -  -  - - -  - -  - - -  - -  -  -  - -  -  -  - -  -  -  - -  -  -  -  -  -  - -  - -  -  -  -  - -  -  -  - - - - -  - -  - -  - -  -  - -  - 
// var ipfsAPIclt = require('ipfs-api')
-// var extend = require('extend')
-// var PeerId = require('peer-id')
-// var PeerInfo = require('peer-info')
-var config = require('./config')
-var IPFSRepo = require('ipfs-repo')
- 
-exports = module.exports = IPFS
- 
-function IPFS () {
-  var self = this
- 
-  Iif (!(self instanceof IPFS)) {
-    throw new Error('Must be instantiated with new')
-  }
- 
-  var opts = {
-    url: 'public-writable-node'
-  }
- 
-  Iif (process.env.NODE_ENV === 'dev') {
-    opts.url = '/ip4/127.0.0.1/tcp/5001'
-  }
- 
-  Iif (process.env.NODE_ENV === 'test') {
-    opts.url = process.env.APIURL
-  }
- 
-  // var api = ipfsAPIclt(config.url)
-  // extend(self, api)
- 
-  self.repo = new IPFSRepo(config.repoPath)
- 
-  self.init = function (bits, force, empty, callback) {
-    // 1. check if repo already exists
- 
-  }
- 
-  self.daemon = function (callback) {
-    // 1. read repo to get peer data
-  }
- 
-  self.version = function (opts, callback) {
-    Eif (typeof opts === 'function') {
-      callback = opts
-      opts = {}
-    }
-    Iif (!self.repo.exists()) {
-      callback(new Error('Repo does not exist, you must init repo first'))
-    } else { self.repo.load() }
- 
-    self.repo.version.read(callback)
-  }
- 
-  self.id = function (format, callback) {}
-}
- 
-
-
- - - - - - - diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7cda3..0000000000 --- a/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e03866..0000000000 --- a/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/coverage/lcov.info b/coverage/lcov.info deleted file mode 100644 index 927835bc16..0000000000 --- a/coverage/lcov.info +++ /dev/null @@ -1,67 +0,0 @@ -TN: -SF:/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/index.js -FN:10,IPFS -FN:34,(anonymous_2) -FN:39,(anonymous_3) -FN:43,(anonymous_4) -FN:55,(anonymous_5) -FNF:5 -FNH:2 -FNDA:1,IPFS -FNDA:0,(anonymous_2) -FNDA:0,(anonymous_3) -FNDA:1,(anonymous_4) -FNDA:0,(anonymous_5) -DA:5,1 -DA:6,1 -DA:8,1 -DA:10,1 -DA:11,1 -DA:13,1 -DA:14,0 -DA:17,1 -DA:21,1 -DA:22,0 -DA:25,1 -DA:26,0 -DA:32,1 -DA:34,1 -DA:39,1 -DA:43,1 -DA:44,1 -DA:45,1 -DA:46,1 -DA:48,1 -DA:49,0 -DA:50,1 -DA:52,1 -DA:55,1 -LF:24 -LH:20 -BRDA:13,1,0,0 -BRDA:13,1,1,1 -BRDA:21,2,0,0 -BRDA:21,2,1,1 -BRDA:25,3,0,0 -BRDA:25,3,1,1 -BRDA:44,4,0,1 -BRDA:44,4,1,0 -BRDA:48,5,0,0 -BRDA:48,5,1,1 -BRF:10 -BRH:5 -end_of_record -TN: -SF:/Users/david/Documents/code/ipfs/_ipfs/js/js-ipfs/src/ipfs-core/config.js -FNF:0 -FNH:0 -DA:1,1 -DA:3,1 -DA:5,1 -LF:3 -LH:3 -BRDA:5,1,0,1 -BRDA:5,1,1,0 -BRF:2 -BRH:1 -end_of_record From 237425007e7aba589b66f36a9221ce20f61d7af0 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 10 Dec 2015 14:01:50 -0800 Subject: [PATCH 14/16] jsipfs repo version --- package.json | 2 +- src/cli/commands/repo/gc.js | 12 ++++++++++ src/cli/commands/repo/init.js | 12 ++++++++++ src/cli/commands/repo/version.js | 19 +++++++++++++++ src/cli/commands/version.js | 29 +++++++++++++++++++++-- src/ipfs-core/index.js | 40 +++++++++++++++++++++++++------- tests/jsipfs-test.js | 4 ++-- 7 files changed, 104 insertions(+), 14 deletions(-) create mode 100644 src/cli/commands/repo/gc.js create mode 100644 src/cli/commands/repo/init.js create mode 100644 src/cli/commands/repo/version.js diff --git a/package.json b/package.json index 9d9461ba87..45b9b15736 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "js-ipfs", - "version": "0.0.0", + "version": "0.0.1", "description": "JavaScript implementation of the IPFS specification", "bin": { "jsipfs": "src/cli/bin.js" diff --git a/src/cli/commands/repo/gc.js b/src/cli/commands/repo/gc.js new file mode 100644 index 0000000000..a85298d461 --- /dev/null +++ b/src/cli/commands/repo/gc.js @@ -0,0 +1,12 @@ +var Command = require('ronin').Command +// var IPFS = require('../../ipfs-core') + +module.exports = Command.extend({ + desc: '', + + options: { + }, + + run: function (name) { + } +}) diff --git a/src/cli/commands/repo/init.js b/src/cli/commands/repo/init.js new file mode 100644 index 0000000000..a85298d461 --- /dev/null +++ b/src/cli/commands/repo/init.js @@ -0,0 +1,12 @@ +var Command = require('ronin').Command +// var IPFS = require('../../ipfs-core') + +module.exports = Command.extend({ + desc: '', + + options: { + }, + + run: function (name) { + } +}) diff --git a/src/cli/commands/repo/version.js b/src/cli/commands/repo/version.js new file mode 100644 index 0000000000..f3800e0e09 --- /dev/null +++ b/src/cli/commands/repo/version.js @@ -0,0 +1,19 @@ +var Command = require('ronin').Command +var IPFS = require('../../../ipfs-core') + +module.exports = Command.extend({ + desc: 'Shows IPFS repo version information', + + options: { + }, + + run: function (name) { + var node = new IPFS() + node.repo.version(function (err, version) { + if (err) { + return console.error(err) + } + console.log(version) + }) + } +}) diff --git a/src/cli/commands/version.js b/src/cli/commands/version.js index deedf71f28..34cf53e9c5 100644 --- a/src/cli/commands/version.js +++ b/src/cli/commands/version.js @@ -1,7 +1,32 @@ var Command = require('ronin').Command +var IPFS = require('../../ipfs-core') module.exports = Command.extend({ - desc: '', + desc: 'Shows IPFS version information', - run: function (name) {} + options: { + number: { + alias: 'n', + type: 'boolean', + default: false + }, + commit: { + type: 'boolean', + default: false + }, + repo: { + type: 'boolean', + default: false + } + }, + + run: function (name) { + var node = new IPFS() + node.version(function (err, version) { + if (err) { + return console.error(err) + } + console.log(version) + }) + } }) diff --git a/src/ipfs-core/index.js b/src/ipfs-core/index.js index 9f64353905..2329d6bd25 100644 --- a/src/ipfs-core/index.js +++ b/src/ipfs-core/index.js @@ -6,6 +6,7 @@ var config = require('./config') var IPFSRepo = require('ipfs-repo') exports = module.exports = IPFS +exports.config = config function IPFS () { var self = this @@ -29,12 +30,7 @@ function IPFS () { // var api = ipfsAPIclt(config.url) // extend(self, api) - self.repo = new IPFSRepo(config.repoPath) - - self.init = function (bits, force, empty, callback) { - // 1. check if repo already exists - - } + var repo = new IPFSRepo(config.repoPath) self.daemon = function (callback) { // 1. read repo to get peer data @@ -45,12 +41,38 @@ function IPFS () { callback = opts opts = {} } - if (!self.repo.exists()) { + + if (!repo.exists()) { callback(new Error('Repo does not exist, you must init repo first')) - } else { self.repo.load() } + } else { repo.load() } - self.repo.version.read(callback) + repo.config.read(function (err, config) { + if (err) { + return callback(err) + } + callback(null, config.Version.Current) + }) } self.id = function (format, callback) {} + + self.repo = { + init: function (bits, force, empty, callback) { + // 1. check if repo already exists + }, + + version: function (opts, callback) { + if (typeof opts === 'function') { + callback = opts + opts = {} + } + if (!repo.exists()) { + callback(new Error('Repo does not exist, you must init repo first')) + } else { repo.load() } + + repo.version.read(callback) + }, + + gc: function () {} + } } diff --git a/tests/jsipfs-test.js b/tests/jsipfs-test.js index 1f7d7f9533..872993ccbd 100644 --- a/tests/jsipfs-test.js +++ b/tests/jsipfs-test.js @@ -38,8 +38,8 @@ describe('IPFS Repo Tests', function () { done() }) - it('check node version', function (done) { - node.version(function (err, version) { + it('check repo version', function (done) { + node.repo.version(function (err, version) { expect(err).to.equal(null) expect(version).to.be.a('string') expect(Number(version)).to.be.a('number') From c24f5761dd30cb3b92eebbddebb19c199815f751 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 10 Dec 2015 14:34:27 -0800 Subject: [PATCH 15/16] update readme --- README.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 59f716c823..44d32318fb 100644 --- a/README.md +++ b/README.md @@ -50,13 +50,19 @@ The cli is availble through `jsipfs` in your terminal ### API -# Getting jsipfs ready +# Project structure -In order to start enabling applications to use the IPFS JavaScript library sooner, we are releasing a version that presents the full API one could expect from a IPFS node, but delegating all the operations on an IPFS node inside the network, using the js-ipfs-api module. The next will be replacing the internal components as the necessary layers for IPFS get developed. - -- [ ] Implement IPFS api in JS and use a network node for the operations -- [ ] Build a jsipfs cli with feature parity to go-ipfs cli -- [ ] Build bitswap to work over HTTP to talk with the gateways. Performance can be gained through doing the same requests to several nodes and then presenting our want list and stream from several nodes at the same time. Hash checksum is done on the JS itself +``` +┌───┐ ┌───────────────┐ ┌──────────────┐ +│CLI│───▶│ HTTP API ├───▶│IPFS Node Impl│ +└───┘ └───────────────┘ └──────────────┘ + △ △ + └──────────┬─────────┘ + │ + ┌─────┐ + │Tests│ + └─────┘ +``` # Roadmap for the full IPFS implementation in JavaScript @@ -65,9 +71,17 @@ In order to start enabling applications to use the IPFS JavaScript library soone - The network layer of IPFS is now known as libp2p, follow https://github.com/diasdavid/js-libp2p - **Exchange** - [ ] [js-bitswap](https://github.com/diasdavid/js-bitswap). [![](https://img.shields.io/badge/discuss--blue.svg?style=flat-square)](https://github.com/ipfs/js-ipfs/issues/17)![](https://img.shields.io/badge/status-has%20not%20started%20yet-brown.svg?style=flat-square) + - [ ] [js-ipfs-repo](https://github.com/ipfs/js-ipfs-repo) + - [ ] [keys](https://github.com/ipfs/js-ipfs-repo/issues/4) + - [ ] [version](https://github.com/ipfs/js-ipfs-repo/issues/5) + - [ ] [datastore](https://github.com/ipfs/js-ipfs-repo/issues/6) + - [ ] [config](https://github.com/ipfs/js-ipfs-repo/issues/7) + - [ ] [logs](https://github.com/ipfs/js-ipfs-repo/issues/8) + - [ ] [locks](https://github.com/ipfs/js-ipfs-repo/issues/9) - [x] MerkleDAG node implementation (needs IPLD). - [x] [js-ipld](https://github.com/diasdavid/js-ipld) ![](https://img.shields.io/badge/status-in%20progress-yellow.svg?style=flat-square) - [x] [js-merkledag-store](https://github.com/diasdavid/js-merkledag-store) ![](https://img.shields.io/badge/status-in%20progress-yellow.svg?style=flat-square) + - [ ] js-ipfs [follow the roadmap](https://github.com/ipfs/pm/blob/js-ipfs/roadmap/ROADMAP.js-ipfs.md) - [**Spec**](https://github.com/ipfs/specs/tree/master/protocol/network) ![](https://img.shields.io/badge/status-in%20progress-yellow.svg?style=flat-square) ### status badges From 35eb22dbe048440b3aa9c9f167b6745f1b56a538 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 10 Dec 2015 14:44:32 -0800 Subject: [PATCH 16/16] add travis config; --- .travis.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..c215b40358 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: node_js +node_js: + - "4" + - "5" + +branches: + only: + - master + +before_install: + - npm i -g npm + # Workaround for a permissions issue with Travis virtual machine images +script: + - npm test