From b628dbe1d995033340955701da21b06f602f786b Mon Sep 17 00:00:00 2001 From: Max Thayer Date: Fri, 6 Sep 2013 10:02:16 -0400 Subject: [PATCH] rmcouchdb doesn't drop everything if dbname is absent; mkcouchdb reports helpful error message if dbname is absent --- README.md | 3 +-- tasks/couchapp.js | 61 ++++++++++++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index f043944..30c09d1 100644 --- a/README.md +++ b/README.md @@ -68,8 +68,7 @@ possible to write in your configuration file: }); -Note, however, that if you call 'rmcouchdb' without a sub-argument, in -keeping with grunt's standards, it will drop *all* of your databases! +Note that if you call `rmcouchdb` without a sub-argument, it will not delete any databases. ## Demo diff --git a/tasks/couchapp.js b/tasks/couchapp.js index 6b7811f..272937a 100644 --- a/tasks/couchapp.js +++ b/tasks/couchapp.js @@ -34,21 +34,26 @@ module.exports = function(grunt) { dbname = parts.pathname.replace(/^\//, ''); try { nano = require('nano')(parts.protocol + '//' + parts.host); - nano.db.destroy(dbname, function(err) { - if (err) { - if (err.status_code && err.status_code === 404) { - if (_this.data.options && _this.data.options.okay_if_missing) { - grunt.log.writeln("Database " + dbname + " not present... skipping."); - return done(null, null) ; + if (dbname) { + nano.db.destroy(dbname, function(err) { + if (err) { + if (err.status_code && err.status_code === 404) { + if (_this.data.options && _this.data.options.okay_if_missing) { + grunt.log.writeln("Database " + dbname + " not present... skipping."); + return done(null, null) ; + } else { + grunt.warn("Database " + dbname + " does not exist."); + } } else { - grunt.warn("Database " + dbname + " does not exist."); + grunt.warn(err); } - } else { - grunt.warn(err); } - } - return done(err, null); - }); + return done(err, null); + }); + } else { + grunt.log.writeln("No database specified... skipping."); + return done(null, null); + } } catch (e) { grunt.warn(e); done(e, null); @@ -62,20 +67,26 @@ module.exports = function(grunt) { parts = urls.parse(this.data.db); dbname = parts.pathname.replace(/^\//, ''); try { - nano = require('nano')(parts.protocol + '//' + parts.host); - nano.db.create(dbname, function(err) { - if (_this.data.options && _this.data.options.okay_if_exists) { - if (err){ - grunt.log.writeln("Database " + dbname + " exists, skipping"); + if (dbname) { + nano = require('nano')(parts.protocol + '//' + parts.host); + nano.db.create(dbname, function(err) { + if (_this.data.options && _this.data.options.okay_if_exists) { + if (err){ + grunt.log.writeln("Database " + dbname + " exists, skipping"); + } + return done(null, null); + } else { + if (err){ + grunt.warn(err); + } + return done(err, null); } - return done(null, null); - } else { - if (err){ - grunt.warn(err); - } - return done(err, null); - } - }); + }); + } else { + var err_msg = "No database specified... skipping."; + grunt.warn(err_msg); + return done(new Error(err_msg), null); + } } catch (e) { grunt.warn(e); done(e, null);