Comparing version 1.2.4 to 1.3.0
@@ -13,2 +13,9 @@ # Change Log | ||
## 1.3.0 - 2017-01-25 | ||
## Added | ||
* `createIfMissing` and `errorIfExists` options | ||
## Deprecated | ||
* `resume` option | ||
## 1.2.4 - 2017-01-24 | ||
@@ -15,0 +22,0 @@ ## Fixed |
var assert = require('assert') | ||
var fs = require('fs') | ||
var path = require('path') | ||
@@ -19,3 +20,9 @@ var level = require('level') | ||
var dbPath = opts.dbPath || path.join(dir, '.dat') | ||
var createIfMissing = opts.createIfMissing === false ? opts.createIfMissing : true | ||
var errorIfExists = opts.errorIfExists || false | ||
// opts.resume backwards compat. TODO: Remove in v2 | ||
if (opts.resume) createIfMissing = false | ||
if (opts.resume === false) errorIfExists = true | ||
if (!opts.file) { | ||
@@ -34,10 +41,22 @@ // TODO: do we always want this set? | ||
debug('Making/Reading archive database') | ||
level(dbPath, function (err, _db) { | ||
if (err) return cb(err) | ||
db = _db | ||
drive = hyperdrive(db) | ||
checkDriveKeys() | ||
}) | ||
if (createIfMissing !== false) return createDb() | ||
try { | ||
// check if existing dbPath | ||
if (!fs.statSync(dbPath).isDirectory()) throw new Error('No existing .dat folder') | ||
return createDb() | ||
} catch (e) { | ||
return cb(e) | ||
} | ||
function createDb () { | ||
debug('Making/Reading archive database') | ||
level(dbPath, function (err, _db) { | ||
if (err) return cb(err) | ||
db = _db | ||
drive = hyperdrive(db) | ||
checkDriveKeys() | ||
}) | ||
} | ||
function checkDriveKeys () { | ||
@@ -48,4 +67,8 @@ // Try to resume archives if there are keys in the drive | ||
if (err) return cb(err) | ||
if (vals.length > 2 && !opts.key) return cb('Drive has multiple archives. Must specify key.') | ||
else if (!vals.length || opts.key) { | ||
if (vals.length > 2 && !opts.key) return cb(new Error('Drive has multiple archives. Must specify key.')) | ||
else if (errorIfExists && vals.length) { | ||
return db.close(function () { | ||
cb(new Error('Existing feeds in database.')) | ||
}) | ||
} else if (!vals.length || opts.key) { | ||
if (!vals.length) debug('No existing feeds in drive') | ||
@@ -52,0 +75,0 @@ if (opts.key) debug('Resuming using key option', opts.key) |
{ | ||
"name": "dat-node", | ||
"version": "1.2.4", | ||
"version": "1.3.0", | ||
"description": "Build node applications with Dat archives on the file system.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -125,2 +125,5 @@ # dat-node | ||
// If only dir is specified (not a custom drive/db) You can use these options: | ||
createIfMissing: true, // create db if doesn't exist | ||
errorIfExists: false, // error if existing archive in database | ||
dbPath: path.join(opts.dir,'.dat') // directory name for level database | ||
@@ -127,0 +130,0 @@ } |
@@ -270,1 +270,31 @@ var path = require('path') | ||
}) | ||
test('createIfMissing false', function (t) { | ||
rimraf.sync(path.join(shareFolder, '.dat')) | ||
Dat(shareFolder, {createIfMissing: false}, function (err, dat) { | ||
t.ok(err, 'throws error') | ||
t.end() | ||
}) | ||
}) | ||
test('backwards compat resume true', function (t) { | ||
rimraf.sync(path.join(shareFolder, '.dat')) | ||
Dat(shareFolder, {resume: true}, function (err, dat) { | ||
t.ok(err, 'throws error') | ||
t.end() | ||
}) | ||
}) | ||
test('errorIfExists true', function (t) { | ||
rimraf.sync(path.join(shareFolder, '.dat')) | ||
// create dat to resume from | ||
Dat(shareFolder, function (err, dat) { | ||
t.ifErr(err) | ||
dat.close(function () { | ||
Dat(shareFolder, {errorIfExists: true}, function (err, dat) { | ||
t.ok(err, 'throws error') | ||
t.end() | ||
}) | ||
}) | ||
}) | ||
}) |
147733
929
287
8