diff --git a/src/reactTemplates.js b/src/reactTemplates.js index f0ec735..6006dca 100644 --- a/src/reactTemplates.js +++ b/src/reactTemplates.js @@ -263,6 +263,13 @@ function convertFile(source, target) { // console.log('invalid file, only handle html files'); // return;// only handle html files // } + var util = require('./util'); + + if (!util.isStale(source, target)) { + console.log('target file ' + target + ' is up to date, skipping'); +// return; + } + var html = fs.readFileSync(source).toString(); if (!html.match(/\<\!doctype jsx/i)) { throw new Error('invalid file, missing header'); diff --git a/src/util.js b/src/util.js new file mode 100644 index 0000000..ef05289 --- /dev/null +++ b/src/util.js @@ -0,0 +1,21 @@ +'use strict'; +var fs = require('fs'); +var path = require('path'); + +/** + * @param {string} source + * @param {string} target + * @return {boolean} + */ +function isStale(source, target) { + if (!fs.existsSync(target)) { + return true; + } + var sourceTime = fs.statSync(source).mtime; + var targetTime = fs.statSync(target).mtime; + return sourceTime.getTime() > targetTime.getTime(); +} + +module.exports = { + isStale: isStale +}; \ No newline at end of file diff --git a/test/src/test.js b/test/src/test.js index 09ead69..de9c9e3 100644 --- a/test/src/test.js +++ b/test/src/test.js @@ -56,3 +56,21 @@ test('html tests', function (t) { }); +test('util.isStale', function (t) { + t.plan(2); + var a = path.join(dataPath, 'a.tmp'); + var b = path.join(dataPath, 'b.tmp'); + + var mtime1 = new Date(1995, 11, 17, 3, 24, 0); + fs.utimesSync(a, mtime1, mtime1); + + var mtime2 = new Date(1995, 11, 17, 3, 24, 1); + fs.utimesSync(b, mtime2, mtime2); + + var util = require('../../src/util'); + var actual = util.isStale(a, b); + t.equal(actual, false); + actual = util.isStale(b, a); + t.equal(actual, true); +}); +