diff --git a/desirae.js b/desirae.js index 18d6b66..05d6755 100644 --- a/desirae.js +++ b/desirae.js @@ -242,6 +242,14 @@ }; // read config and such + Desi._initFileAdapter = function (env) { + if (!exports.window) { + // TODO pull state out of this later + Desi.realFsapi.create(Desi, env); + } + return PromiseA.resolve(); + }; + Desi.init = function (desi, env) { console.log(''); console.log(''); diff --git a/lib/node-adapters/fsapi-real.js b/lib/node-adapters/fsapi-real.js index c58d226..3a5c01c 100644 --- a/lib/node-adapters/fsapi-real.js +++ b/lib/node-adapters/fsapi-real.js @@ -8,7 +8,7 @@ function create(Desi, options) { var fsapi = Desi.fsapi ; - options.blogdir = options.working_path; + options.blogdir = options.blogdir || options.working_path; fsapi.getMeta = function (dirnames, opts) { opts = opts || {}; @@ -53,7 +53,7 @@ function create(Desi, options) { return fsapi.copyfs(options.blogdir, files); }; - fsapi.putFiles = function (files) { + fsapi.putFiles = function (files, opts) { files.forEach(function (file) { if (!file.contents || 'string' === typeof file.contents) { return; @@ -62,12 +62,12 @@ function create(Desi, options) { file.contents = JSON.stringify(file.contents); } else if (/\.ya?ml$/i.test(file.path)) { - file.contents = exports.jsyaml.dump(file.contents); + file.contents = Desi.YAML.stringify(file.contents); } }); // TODO size - return fsapi.putfs(options.blogdir, files); + return fsapi.putfs(options.blogdir, files, opts); }; } diff --git a/lib/node-adapters/fsapi.js b/lib/node-adapters/fsapi.js index f662fb8..ddcbd78 100644 --- a/lib/node-adapters/fsapi.js +++ b/lib/node-adapters/fsapi.js @@ -270,8 +270,10 @@ function copyfs(blogdir, files) { }); } -function putfs(blogdir, files) { - var results = { errors: [] } +function putfs(blogdir, files, options) { + options = options || {}; + + var putfsResults = { errors: [] } , dirpaths = {} ; @@ -294,7 +296,7 @@ function putfs(blogdir, files) { return forEachAsync(Object.keys(dirpaths), function (pathname) { return mkdirp(pathname).catch(function (e) { // TODO exclude attempting to write files to this dir? - results.errors.push({ + putfsResults.errors.push({ type: 'directory' , directory: pathname @@ -311,19 +313,23 @@ function putfs(blogdir, files) { }).then(function () { // TODO sort deletes last return forEachAsync(files, function (file) { - var p - ; - // TODO use lastModifiedDate as per client request? // TODO compare sha1 sums for integrity - if (file.delete || !file.contents) { - p = fs.unlinkAsync(file.realPath); - } else { - p = fs.writeFileAsync(file.realPath, file.contents, 'utf8'); - } + // NOTE existsAsync is backwards + return fs.existsAsync(file.realPath).then(function () { + return fs.writeFileAsync(file.realPath, file.contents, 'utf8'); + }).catch(function (/*exists*/) { + if (file.delete || !file.contents) { + return fs.unlinkAsync(file.realPath); + } - return p.catch(function (e) { - results.errors.push({ + if (false === options.replace || false === options.overwrite) { + throw new Error('EEXIST: the file already exists'); + } + + return fs.writeFileAsync(file.realPath, file.contents, 'utf8'); + }).catch(function (e) { + putfsResults.errors.push({ type: 'file' , file: file.realPath @@ -341,7 +347,7 @@ function putfs(blogdir, files) { }); }); }).catch(function (e) { - results.error = { + putfsResults.error = { message: e.message , code: e.code , errno: e.errno @@ -349,7 +355,7 @@ function putfs(blogdir, files) { , syscall: e.syscall }; }).then(function () { - return results; + return putfsResults; }); } /*