From 1b100007edfbafd2650a4f57fde7312b0a6b963e Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Tue, 17 Mar 2015 10:47:19 +1000 Subject: [PATCH 1/2] Allow an actual buildDir to be set and only delete versioned files --- ingredients/version.js | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/ingredients/version.js b/ingredients/version.js index bb3ec84..f695d02 100644 --- a/ingredients/version.js +++ b/ingredients/version.js @@ -28,7 +28,6 @@ elixir.extend('version', function(src, buildDir) { return this.queueTask('version'); }); - /** * Build the "version" Gulp task. * @@ -44,9 +43,7 @@ var buildTask = function(src, buildDir) { utilities.logTask("Versioning", src); - // To start, we'll clear out the build directory, - // so that we can start from scratch. - del.sync(buildDir + '/*', { force: true }); + deletePreviousVersion(buildDir); return gulp.src(src, { base: './public' }) .pipe(gulp.dest(buildDir)) @@ -56,18 +53,12 @@ var buildTask = function(src, buildDir) { .pipe(rev.manifest()) .pipe(gulp.dest(buildDir)) .on('end', function() { - // We'll get rid of the duplicated file that - // usually gets put in the "build" folder, - // alongside the suffixed version. - del(files.paths); - - // We'll also copy over relevant sourcemap files. + // Copy over relevant sourcemap files. copyMaps(src, buildDir); }); }); }; - /** * Prepare the path to the build directory. * @@ -75,10 +66,9 @@ var buildTask = function(src, buildDir) { * @return {string} */ var getBuildDir = function(buildDir) { - return buildDir ? buildDir + '/build' : 'public/build'; + return buildDir ? buildDir : 'public/build'; }; - /** * Copy source maps to the build directory. * @@ -105,6 +95,25 @@ var copyMaps = function(src, buildDir) { mappings.forEach(function(mapping) { var map = mapping.replace('public', buildDir); - gulp.src(mapping).pipe(gulp.dest(parsePath(map).dirname)); + if (map !== mapping) { + gulp.src(mapping).pipe(gulp.dest(parsePath(map).dirname)); + } }); }; + +/** + * Deletes previously versioned files defined within the rev-manifest file + * + * @param {string} buildDir + */ +var deletePreviousVersion = function (buildDir) { + var revManifest = buildDir + '/rev-manifest.json'; + + if (fs.existsSync(revManifest)) { + var files = JSON.parse(fs.readFileSync(revManifest, 'utf8')); + + for (var file in files) { + del.sync(buildDir + '/' + files[file], {force: true}); + } + } +}; From d6123cb61bf0bb379faee48ebd58d34a6ec6396a Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Tue, 7 Apr 2015 12:33:24 +1000 Subject: [PATCH 2/2] Delete duplicated files gulp-rev will create a copy of the original file, e.g. all.js while creating the revisioned version all-ffffff.js. This now deletes both the original file and the copy that gulp-rev creates --- ingredients/version.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/ingredients/version.js b/ingredients/version.js index f695d02..23ebddf 100644 --- a/ingredients/version.js +++ b/ingredients/version.js @@ -55,6 +55,9 @@ var buildTask = function(src, buildDir) { .on('end', function() { // Copy over relevant sourcemap files. copyMaps(src, buildDir); + + // Delete pre-versioned files + deletePreVersionedFiles(src, buildDir); }); }); }; @@ -96,7 +99,11 @@ var copyMaps = function(src, buildDir) { var map = mapping.replace('public', buildDir); if (map !== mapping) { - gulp.src(mapping).pipe(gulp.dest(parsePath(map).dirname)); + gulp.src(mapping) + .pipe(gulp.dest(parsePath(map).dirname)) + .on('end', function() { + del.sync(mapping); + }); } }); }; @@ -117,3 +124,22 @@ var deletePreviousVersion = function (buildDir) { } } }; + +/** + * Deletes original files that were versioned + * + * @param {string} src + * @param {string} buildDir + */ +var deletePreVersionedFiles = function (src, buildDir) { + for (var i in src) { + var file = src[i], + duplicateCopy = file.replace('public', buildDir); + + del.sync(file, {force: true}); + + if (fs.existsSync(duplicateCopy)) { + del.sync(duplicateCopy, {force: true}); + } + } +}