diff --git a/package.json b/package.json index 6e393597..50780a24 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "express-secure-handlebars": "^2.1.0", "express-session": "^1.13.0", "extend": "^3.0.0", + "fs-compare": "0.0.4", "fs-extra": "^2.0.0", "handlebars": "^4.0.3", "handlebars-helper-slugify": "^0.3.2", diff --git a/src/cli/cms/templates/assets.js b/src/cli/cms/templates/assets.js index c54262a0..e8ed259f 100644 --- a/src/cli/cms/templates/assets.js +++ b/src/cli/cms/templates/assets.js @@ -1,4 +1,5 @@ import fse from 'fs-extra' +import fsCompare from 'fs-compare' import dircompare from 'dir-compare' import mkdirp from 'mkdirp' import path from 'path' @@ -47,7 +48,25 @@ export function copy() { var basePath = original.replace(publicFolder, '') var move = path.join(dest, basePath) - if(entry.type2 === 'missing' || entry.state === 'distinct') { + if(move === dest){ + fse.readdir(original, function (res, items) { + Array.prototype.forEach.call(items, (item) => { + var lstat = fse.lstatSync(path.join(original, item)) + var originalItem = path.join(original, item) + var destItem = path.join(dest, item) + if (!lstat.isDirectory()) { + try { + fsCompare(modifiedTime, originalItem, destItem, function (err, diff) { + if(diff > 0) fse.copySync(originalItem, destItem) + }) + } catch (e) { + fse.copySync(originalItem, destItem) + } + } + }) + }) + } + else if(entry.type2 === 'missing' || entry.state === 'distinct') { fse.removeSync(move) fse.copySync(original, move) } @@ -59,6 +78,15 @@ export function copy() { return publicFolders } +function modifiedTime(fileName, cb) { + fse.stat(fileName, function (err, stat) { + if (err) { + return cb(err); + } + return cb(null, stat.mtime); + }); +} + export function getFolders() { const templateExtension = '.' + config.files.templates.extension const assetsExtension = config.files.templates.assets