Permalink
Please sign in to comment.
Showing
with
67 additions
and 14 deletions.
- +1 −0 .gitignore
- +17 −10 cli.js
- +44 −3 index.js
- +5 −1 package.json
| @@ -1,16 +1,23 @@ | ||
| #!/usr/bin/env node | ||
| var args = require('minimist')(process.argv.splice(2)) | ||
| var usage = require('./usage') | ||
| var dat = require('./') | ||
| var cmd = args._[0] | ||
| if (cmd === 'share') { | ||
| // share | ||
| var loc = args._[1] || process.cwd() | ||
| var db = dat(loc) | ||
| } else if (cmd) { | ||
| // download | ||
| var hash = args._[1] | ||
| if (!hash) return usage() | ||
| } else { | ||
| return usage('root.txt') | ||
| run() | ||
| function run () { | ||
| if (cmd === 'share') { | ||
| // share | ||
| var loc = args._[1] || process.cwd() | ||
| var db = dat(loc) | ||
| db.share() | ||
| } else if (cmd) { | ||
| // download | ||
| var hash = args._[1] | ||
| if (!hash) return usage() | ||
| } else { | ||
| return usage('root.txt') | ||
| } | ||
| } |
| @@ -1,12 +1,53 @@ | ||
| var level = require('level') | ||
| var fs = require('fs') | ||
| var path = require('path') | ||
| var walker = require('folder-walker') | ||
| var level = require('level') | ||
| var homedir = require('os-homedir') | ||
| var hyperdrive = require('hyperdrive') | ||
| var xtend = require('xtend') | ||
| var mkdirp = require('mkdirp') | ||
| var through = require('through2') | ||
| var pump = require('pump') | ||
| module.exports = Dat | ||
| function Dat (loc, opts) { | ||
| function Dat (dir, opts) { | ||
| if (!(this instanceof Dat)) return new Dat(dir, opts) | ||
| if (!opts) opts = {} | ||
| this.dir = dir | ||
| var defaults = { | ||
| createIfMissing: true | ||
| } | ||
| opts = xtend(opts, defaults) | ||
| var datPath = path.join(homedir(), '.dat/db') | ||
| return hyperdrive(level(datPath), opts) | ||
| if (opts.createIfMissing) mkdirp.sync(datPath) | ||
| var hyperdriveOpts = {name: 'dat'} | ||
| var drive = hyperdrive(level(datPath, opts), hyperdriveOpts) | ||
| this.drive = drive | ||
| } | ||
| Dat.prototype.share = function () { | ||
| var stream = walker(this.dir, {filter: function (filename) { | ||
| var basename = path.basename(filename) | ||
| if (basename[0] === '.') return false // ignore hidden files and folders | ||
| return true | ||
| }}) | ||
| var pack = this.drive.add() | ||
| var adder = through.obj(function (data, enc, next) { | ||
| var isFile = data.stat.isFile() | ||
| if (!isFile) { | ||
| console.log('skipping non file', data.filepath) | ||
| return next() | ||
| } | ||
| console.log('reading', data.filepath) | ||
| var entry = pack.entry({name: data.relname, mode: data.stat.mode}) | ||
| fs.createReadStream(data.filepath).pipe(entry) | ||
| next() | ||
| }) | ||
| pump(stream, adder, function (err) { | ||
| if (err) throw err | ||
| pack.finalize(function () { | ||
| console.log('added stuff') | ||
| }) | ||
| }) | ||
| } |
0 comments on commit
0ce2279