From 7b96380559bbfe6819c4b6973bb63f1051e2c69e Mon Sep 17 00:00:00 2001 From: Tommy Chen Date: Fri, 21 Mar 2014 13:19:00 +0800 Subject: [PATCH] Drop domain fallback --- lib/box/index.js | 48 ++++++++------ lib/core/index.js | 28 +++----- lib/plugins/processor/page.js | 61 ++++++++--------- lib/plugins/processor/post.js | 120 ++++++++++++++++------------------ package.json | 3 + 5 files changed, 125 insertions(+), 135 deletions(-) diff --git a/lib/box/index.js b/lib/box/index.js index 45756f99b6..9c2680340e 100644 --- a/lib/box/index.js +++ b/lib/box/index.js @@ -3,6 +3,7 @@ var fs = require('graceful-fs'), async = require('async'), _ = require('lodash'), chokidar = require('chokidar'), + domain = require('domain'), EventEmitter = require('events').EventEmitter, Pattern = require('./pattern'), HexoError = require('../error'), @@ -107,7 +108,12 @@ Box.prototype.addProcessor = function(pattern, fn){ Box.prototype._dispatch = function(type, path, callback){ if (typeof callback !== 'function') callback = function(){}; - var self = this; + var self = this, + d = domain.create(); + + d.on('error', function(err){ + return callback(HexoError.wrap(err, 'Process failed: ' + path)); + }); // Replace backslashes on Windows path = path.replace(/\\/g, '/'); @@ -117,29 +123,31 @@ Box.prototype._dispatch = function(type, path, callback){ this.processingFiles[path] = true; - async.each(this.processors, function(processor, next){ - if (!processor.pattern.test(path)) return next(); + d.run(function(){ + async.each(self.processors, function(processor, next){ + if (!processor.pattern.test(path)) return next(); - var params = processor.pattern.match(path), - src = pathFn.join(self.base, path); + var params = processor.pattern.match(path), + src = pathFn.join(self.base, path); - processor.process(new File(self, src, path, type, params), function(err){ - if (err){ - if (err instanceof HexoError){ - return next(err); - } else { - return next(HexoError.wrap(err, 'Process failed: ' + path)); + processor.process(new File(self, src, path, type, params), function(err){ + if (err){ + if (err instanceof HexoError){ + return next(err); + } else { + return next(HexoError.wrap(err, 'Process failed: ' + path)); + } } - } - next(); - }); - }, function(err){ - if (err) return callback(err); + next(); + }); + }, function(err){ + if (err) return callback(err); - self.processingFiles[path] = false; - hexo.log.d('Processed: %s', path); - callback(); + self.processingFiles[path] = false; + hexo.log.d('Processed: %s', path); + callback(); + }); }); }; @@ -188,7 +196,7 @@ Box.prototype.process = function(files, callback){ } }, function(files, next){ - async.eachSeries(files, function(item, next){ + async.each(files, function(item, next){ var type, path; if (_.isObject(item)){ diff --git a/lib/core/index.js b/lib/core/index.js index c9cdd1bc14..25bc2cfe76 100644 --- a/lib/core/index.js +++ b/lib/core/index.js @@ -12,11 +12,7 @@ var EventEmitter = require('events').EventEmitter, Box = require('../box'), version = require('../../package.json').version, HexoError = require('../error'); - domain = null; - -try { domain = require('domain'); -} catch (err){} /** * All Hexo methods and functions are defined inside of this namespace. @@ -226,24 +222,16 @@ Hexo.prototype.call = function(name, args, callback){ var console = this.extend.console.get(name); if (console){ - if (domain){ - var d = domain.create(); + var d = domain.create(); - d.on('error', function(err){ - d.dispose(); - callback(err); - }); + d.on('error', function(err){ + d.dispose(); + callback(err); + }); - d.run(function(){ - console(args, callback); - }); - } else { - try { - console(args, callback); - } catch (err){ - callback(err); - } - } + d.run(function(){ + console(args, callback); + }); } else { callback(new Error('Console `' + name + '` not found')); } diff --git a/lib/plugins/processor/page.js b/lib/plugins/processor/page.js index cc3195cc27..83d21bb125 100644 --- a/lib/plugins/processor/page.js +++ b/lib/plugins/processor/page.js @@ -28,50 +28,45 @@ module.exports = function(data, callback){ }, function(err, results){ if (err) return callback(err); - try { - var stat = results.stat, - link = '', - meta = yfm(results.read); + var stat = results.stat, + link = '', + meta = yfm(results.read); - meta.content = meta._content; - delete meta._content; + meta.content = meta._content; + delete meta._content; - meta.source = path; - meta.raw = results.read; + meta.source = path; + meta.raw = results.read; - if (meta.date){ - if (!(meta.date instanceof Date)){ - meta.date = moment(meta.date, 'YYYY-MM-DD HH:mm:ss').toDate(); - } - } else { - meta.date = stat.ctime; + if (meta.date){ + if (!(meta.date instanceof Date)){ + meta.date = moment(meta.date, 'YYYY-MM-DD HH:mm:ss').toDate(); } + } else { + meta.date = stat.ctime; + } - if (meta.updated){ - if (!(meta.updated instanceof Date)){ - meta.updated = moment(meta.updated, 'YYYY-MM-DD HH:mm:ss').toDate(); - } - } else { - meta.updated = stat.mtime; + if (meta.updated){ + if (!(meta.updated instanceof Date)){ + meta.updated = moment(meta.updated, 'YYYY-MM-DD HH:mm:ss').toDate(); } + } else { + meta.updated = stat.mtime; + } - if (meta.permalink){ - link = meta.permalink; - delete meta.permalink; + if (meta.permalink){ + link = meta.permalink; + delete meta.permalink; - if (!pathFn.extname(link)){ - link += (link[link.length - 1] === '/' ? '' : '/') + 'index.' + getOutput(path); - } - } else { - var extname = pathFn.extname(path); - link = path.substring(0, path.length - extname.length + 1) + getOutput(path); + if (!pathFn.extname(link)){ + link += (link[link.length - 1] === '/' ? '' : '/') + 'index.' + getOutput(path); } - - meta.path = link; - } catch (e){ - return callback(e); + } else { + var extname = pathFn.extname(path); + link = path.substring(0, path.length - extname.length + 1) + getOutput(path); } + meta.path = link; hexo.post.render(data.source, meta, function(err, meta){ if (err) return callback(err); diff --git a/lib/plugins/processor/post.js b/lib/plugins/processor/post.js index 9756effe24..c02ce521a2 100644 --- a/lib/plugins/processor/post.js +++ b/lib/plugins/processor/post.js @@ -108,85 +108,81 @@ module.exports = function(data, callback){ data.read({cache: true}, next); }, post: ['stat', 'read', function(next, results){ - try { - var stat = results.stat, - meta = yfm(results.read); + var stat = results.stat, + meta = yfm(results.read); - meta.content = meta._content; - delete meta._content; + meta.content = meta._content; + delete meta._content; - meta.source = data.path; - meta.raw = results.read; - meta.slug = escape(path.match(rBasename)[3]); + meta.source = data.path; + meta.raw = results.read; + meta.slug = escape(path.match(rBasename)[3]); - var filenameInfo = getInfoFromFilename(path); + var filenameInfo = getInfoFromFilename(path); - if (filenameInfo && filenameInfo.title) meta.slug = filenameInfo.title; + if (filenameInfo && filenameInfo.title) meta.slug = filenameInfo.title; - if (meta.date){ - if (!(meta.date instanceof Date)){ - meta.date = moment(meta.date, 'YYYY-MM-DD HH:mm:ss').toDate(); - } - } else { - if (filenameInfo && filenameInfo.year && (filenameInfo.month || filenameInfo.i_month) && (filenameInfo.day || filenameInfo.i_day)){ - meta.date = new Date( - filenameInfo.year, - parseInt(filenameInfo.month || filenameInfo.i_month, 10) - 1, - parseInt(filenameInfo.day || filenameInfo.i_day, 10) - ); - } else { - meta.date = stat.ctime; - } + if (meta.date){ + if (!(meta.date instanceof Date)){ + meta.date = moment(meta.date, 'YYYY-MM-DD HH:mm:ss').toDate(); } - - if (meta.updated){ - if (!(meta.updated instanceof Date)){ - meta.updated = moment(meta.updated, 'YYYY-MM-DD HH:mm:ss').toDate(); - } + } else { + if (filenameInfo && filenameInfo.year && (filenameInfo.month || filenameInfo.i_month) && (filenameInfo.day || filenameInfo.i_day)){ + meta.date = new Date( + filenameInfo.year, + parseInt(filenameInfo.month || filenameInfo.i_month, 10) - 1, + parseInt(filenameInfo.day || filenameInfo.i_day, 10) + ); } else { - meta.updated = stat.mtime; + meta.date = stat.ctime; } + } - if (meta.permalink){ - var link = meta.slug = escape(meta.permalink); - if (!pathFn.extname(link) && link[link.length - 1] !== '/') link += '/'; - delete meta.permalink; + if (meta.updated){ + if (!(meta.updated instanceof Date)){ + meta.updated = moment(meta.updated, 'YYYY-MM-DD HH:mm:ss').toDate(); } + } else { + meta.updated = stat.mtime; + } - if (meta.category){ - meta.categories = meta.category; - delete meta.category; - } + if (meta.permalink){ + var link = meta.slug = escape(meta.permalink); + if (!pathFn.extname(link) && link[link.length - 1] !== '/') link += '/'; + delete meta.permalink; + } - if (meta.categories && !Array.isArray(meta.categories)){ - meta.categories = [meta.categories]; - } + if (meta.category){ + meta.categories = meta.category; + delete meta.category; + } - if (meta.tag){ - meta.tags = meta.tag; - delete meta.tag; - } + if (meta.categories && !Array.isArray(meta.categories)){ + meta.categories = [meta.categories]; + } - if (meta.tags && !Array.isArray(meta.tags)){ - meta.tags = [meta.tags]; - } + if (meta.tag){ + meta.tags = meta.tag; + delete meta.tag; + } - if (meta.photo){ - meta.photos = meta.photo; - delete meta.photo; - } + if (meta.tags && !Array.isArray(meta.tags)){ + meta.tags = [meta.tags]; + } - if (meta.photos && !Array.isArray(meta.photos)){ - meta.photos = [meta.photos]; - } + if (meta.photo){ + meta.photos = meta.photo; + delete meta.photo; + } - if (meta.link && !meta.title){ - meta.title = meta.link - .replace(/^https?:\/\//, '') - .replace(/\/$/, ''); - } - } catch (e){ - return next(e); + if (meta.photos && !Array.isArray(meta.photos)){ + meta.photos = [meta.photos]; + } + + if (meta.link && !meta.title){ + meta.title = meta.link + .replace(/^https?:\/\//, '') + .replace(/\/$/, ''); } hexo.post.render(data.source, meta, function(err, meta){ diff --git a/package.json b/package.json index b53ea6e1a8..8fdf4cde45 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,9 @@ "lib": "./lib", "bin": "./bin" }, + "engines": { + "node": ">= 0.8" + }, "repository": { "type": "git", "url": "git://github.com/tommy351/hexo.git"