Permalink
Comparing changes
Open a pull request
- 2 commits
- 4 files changed
- 0 commit comments
- 1 contributor
Unified
Split
Showing
with
61 additions
and 7 deletions.
- +4 −6 bin/copy.js
- +2 −0 package.json
- +54 −0 tests/copy.js
- +1 −1 usage/copy.txt
| @@ -27,7 +27,7 @@ module.exports = { | ||
| function handleCopy (args) { | ||
| debug('handleCopy', args) | ||
| if (args.help) { | ||
| if (args.help || !args._[0]) { | ||
| usage() | ||
| abort() | ||
| } | ||
| @@ -46,17 +46,15 @@ function handleCopy (args) { | ||
| }) | ||
| function handleOuputStream (db) { | ||
| var outputStream | ||
| if (!args._[0]) outputStream = process.stdout | ||
| else outputStream = fs.createWriteStream(args._[0]) | ||
| var outputStream = fs.createWriteStream(args._[0]) | ||
| var parseReadStream = through.obj(function (data, enc, next) { | ||
| next(null, data.value) | ||
| }) | ||
| pump(db.createReadStream(), parseReadStream, formatData(args.f), outputStream, function done (err) { | ||
| if (err) abort(err, 'Error adding data') | ||
| console.error('Done adding data') | ||
| if (err) abort(err, 'Error copying data to', args._[0]) | ||
| console.error('Done copying data to', args._[0]) | ||
| }) | ||
| } | ||
| } | ||
| @@ -49,7 +49,9 @@ | ||
| "mkdirp": "^0.5.0", | ||
| "npm-execspawn": "^1.1.0", | ||
| "rimraf": "^2.3.2", | ||
| "sort-stream": "^1.0.1", | ||
| "standard": "^3.3.2", | ||
| "stream-iterate": "^1.1.1", | ||
| "tap-spec": "^3.0.0", | ||
| "tape": "^4.0.0", | ||
| "tape-spawn": "^1.2.1" | ||
| @@ -0,0 +1,54 @@ | ||
| var os = require('os') | ||
| var path = require('path') | ||
| var test = require('tape') | ||
| var csv = require('csv-parser') | ||
| var spawn = require('tape-spawn') | ||
| var fs = require ('fs') | ||
| var iterate = require('stream-iterate') | ||
| var sort = require('sort-stream') | ||
| var helpers = require('./helpers') | ||
| var tmp = os.tmpdir() | ||
| var dat = path.resolve(__dirname + '/../cli.js') | ||
| var dat1 = path.join(tmp, 'dat-1') | ||
| helpers.onedat(dat1) | ||
| var csvfile = path.resolve(__dirname + '/fixtures/all_hour.csv') | ||
| var copyfile = path.join(dat1, 'out.csv') | ||
| test('dat add csv', function (t) { | ||
| var st = spawn(t, dat + ' add ' + csvfile + ' --key=id', {cwd: dat1}) | ||
| st.stdout.empty() | ||
| st.stderr.match(/Done adding data/) | ||
| st.end() | ||
| }) | ||
| test('dat copy to file', function (t) { | ||
| var st = spawn(t, dat + ' copy ' + copyfile, {cwd: dat1}) | ||
| st.stdout.empty() | ||
| st.stdout.match(/Done copying data to/) | ||
| st.end() | ||
| }) | ||
| test('dat copy output matches original file', function (t) { | ||
| t.plan(9) | ||
| var sorter = sort(function (a, b) { | ||
| return parseFloat(a['latitude']) < parseFloat(b['latitude']) | ||
| }) | ||
| var original = fs.createReadStream(csvfile).pipe(csv()).pipe(sorter) | ||
| var copied = fs.createReadStream(copyfile).pipe(csv()).pipe(sorter) | ||
| var read = iterate(original) | ||
| var read2 = iterate(copied) | ||
| read(function (err, line, next) { | ||
| read2(function (err, line2, next2) { | ||
| t.deepEquals(line, line2) | ||
| next() | ||
| next2() | ||
| }) | ||
| }) | ||
| }) |
| @@ -1,3 +1,3 @@ | ||
| dat copy [filename] [--format csv,json,ndjson] [--name dataset-name] | ||
| dat copy filename [--format csv,json,ndjson] [--name dataset-name] | ||
| streams data from a dataset to a file or to stdout in a given format. if no dataset name is given, will export from the 'default' dataset |