From bceb08b36faaa357d7680d35a91991aa6b5c3975 Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 5 Jun 2018 20:30:07 -0400 Subject: [PATCH 1/7] build: add check for lib size --- Gulpfile.js | 10 +++++++++- scripts/build/get-dir-size.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 scripts/build/get-dir-size.js diff --git a/Gulpfile.js b/Gulpfile.js index 52744e12740..0c8b4e119cb 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -12,6 +12,7 @@ const clone = require("gulp-clone"); const newer = require("gulp-newer"); const tsc = require("gulp-typescript"); const tsc_oop = require("./scripts/build/gulp-typescript-oop"); +const { getDirSize } = require("./scripts/build/get-dir-size"); const insert = require("gulp-insert"); const sourcemaps = require("gulp-sourcemaps"); const Q = require("q"); @@ -588,7 +589,14 @@ gulp.task("VerifyLKG", /*help*/ false, [], () => { gulp.task("LKGInternal", /*help*/ false, ["lib", "local"]); gulp.task("LKG", "Makes a new LKG out of the built js files", ["clean", "dontUseDebugMode"], () => { - return runSequence("LKGInternal", "VerifyLKG"); + const lib = "./lib"; + const sizeBefore = getDirSize(lib); + const seq = runSequence("LKGInternal", "VerifyLKG"); + const sizeAfter = getDirSize(lib); + if (sizeAfter > (sizeBefore * 1.10)) { + throw new Error("The lib folder increased by 10% or more. This likely indicates a bug."); + } + return seq; }); diff --git a/scripts/build/get-dir-size.js b/scripts/build/get-dir-size.js new file mode 100644 index 00000000000..1b36e4cdb11 --- /dev/null +++ b/scripts/build/get-dir-size.js @@ -0,0 +1,32 @@ +// @ts-check +const { lstatSync, readdirSync } = require("fs"); +const { join } = require("path"); +const { promisify } = require("util"); +const execFile = promisify(require("child_process").execFile); + +/** + * Find the size of a directory recursively. + * Symbolic links are counted once (same inode). + * @param {string} root + * @param {Set} seen + * @returns {number} bytes + */ +function getDirSize(root, seen = new Set()) { + const stats = lstatSync(root); + + if (seen.has(stats.ino)) { + return 0; + } + + seen.add(stats.ino); + + if (!stats.isDirectory()) { + return stats.size; + } + + return readdirSync(root) + .map(file => getDirSize(join(root, file), seen)) + .reduce((acc, num) => acc + num, 0); +} + +exports.getDirSize = getDirSize; From f89273a31f737a371223f80dbbec1c95cb4f0a4a Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 7 Jun 2018 08:41:21 -0400 Subject: [PATCH 2/7] Remove unused promisify --- scripts/build/get-dir-size.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/build/get-dir-size.js b/scripts/build/get-dir-size.js index 1b36e4cdb11..d02c638a03a 100644 --- a/scripts/build/get-dir-size.js +++ b/scripts/build/get-dir-size.js @@ -1,8 +1,6 @@ // @ts-check const { lstatSync, readdirSync } = require("fs"); const { join } = require("path"); -const { promisify } = require("util"); -const execFile = promisify(require("child_process").execFile); /** * Find the size of a directory recursively. From 38a46b754d71fbff6a06254f8b56dd1915bfe690 Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 7 Jun 2018 08:42:32 -0400 Subject: [PATCH 3/7] Rename get-dir-size.js to getDirSize.js --- scripts/build/{get-dir-size.js => getDirSize.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/build/{get-dir-size.js => getDirSize.js} (100%) diff --git a/scripts/build/get-dir-size.js b/scripts/build/getDirSize.js similarity index 100% rename from scripts/build/get-dir-size.js rename to scripts/build/getDirSize.js From 1e0c22453b0e8175de3a1801401ed7aa4e470d2c Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 7 Jun 2018 08:42:57 -0400 Subject: [PATCH 4/7] Rename get-dir-size to getDirSize --- Gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gulpfile.js b/Gulpfile.js index 0c8b4e119cb..7d021d9f360 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -12,7 +12,7 @@ const clone = require("gulp-clone"); const newer = require("gulp-newer"); const tsc = require("gulp-typescript"); const tsc_oop = require("./scripts/build/gulp-typescript-oop"); -const { getDirSize } = require("./scripts/build/get-dir-size"); +const { getDirSize } = require("./scripts/build/getDirSize"); const insert = require("gulp-insert"); const sourcemaps = require("gulp-sourcemaps"); const Q = require("q"); From 06f411c4de1c0f1875560af8db58679e9e743c79 Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 7 Jun 2018 20:52:22 -0400 Subject: [PATCH 5/7] Change getDirSize to default export --- Gulpfile.js | 7 +++---- scripts/build/getDirSize.js | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Gulpfile.js b/Gulpfile.js index 7d021d9f360..db7bb76d34b 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -12,7 +12,7 @@ const clone = require("gulp-clone"); const newer = require("gulp-newer"); const tsc = require("gulp-typescript"); const tsc_oop = require("./scripts/build/gulp-typescript-oop"); -const { getDirSize } = require("./scripts/build/getDirSize"); +const getDirSize = require("./scripts/build/getDirSize"); const insert = require("gulp-insert"); const sourcemaps = require("gulp-sourcemaps"); const Q = require("q"); @@ -589,10 +589,9 @@ gulp.task("VerifyLKG", /*help*/ false, [], () => { gulp.task("LKGInternal", /*help*/ false, ["lib", "local"]); gulp.task("LKG", "Makes a new LKG out of the built js files", ["clean", "dontUseDebugMode"], () => { - const lib = "./lib"; - const sizeBefore = getDirSize(lib); + const sizeBefore = getDirSize(lkgDirectory); const seq = runSequence("LKGInternal", "VerifyLKG"); - const sizeAfter = getDirSize(lib); + const sizeAfter = getDirSize(lkgDirectory); if (sizeAfter > (sizeBefore * 1.10)) { throw new Error("The lib folder increased by 10% or more. This likely indicates a bug."); } diff --git a/scripts/build/getDirSize.js b/scripts/build/getDirSize.js index d02c638a03a..278c4e7f009 100644 --- a/scripts/build/getDirSize.js +++ b/scripts/build/getDirSize.js @@ -27,4 +27,4 @@ function getDirSize(root, seen = new Set()) { .reduce((acc, num) => acc + num, 0); } -exports.getDirSize = getDirSize; +module.exports = getDirSize; From 3cd802510ce8b90af94f6ab2e7047d2185d43668 Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 7 Jun 2018 20:53:44 -0400 Subject: [PATCH 6/7] Add getDirSize checks to Jakefile LKG --- Jakefile.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Jakefile.js b/Jakefile.js index 55729eecaad..fed1bf3e7fa 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -8,6 +8,7 @@ var path = require("path"); var child_process = require("child_process"); var fold = require("travis-fold"); var ts = require("./lib/typescript"); +const getDirSize = require("./scripts/build/getDirSize"); // Variables var compilerDirectory = "src/compiler/"; @@ -643,6 +644,7 @@ task("generate-spec", [specMd]); // Makes a new LKG. This target does not build anything, but errors if not all the outputs are present in the built/local directory desc("Makes a new LKG out of the built js files"); task("LKG", ["clean", "release", "local"].concat(libraryTargets), function () { + const sizeBefore = getDirSize(LKGDirectory); var expectedFiles = [tscFile, servicesFile, serverFile, nodePackageFile, nodeDefinitionsFile, standaloneDefinitionsFile, tsserverLibraryFile, tsserverLibraryDefinitionFile, cancellationTokenFile, typingsInstallerFile, buildProtocolDts, watchGuardFile]. concat(libraryTargets). concat(localizationTargets); @@ -658,10 +660,11 @@ task("LKG", ["clean", "release", "local"].concat(libraryTargets), function () { for (i in expectedFiles) { jake.cpR(expectedFiles[i], LKGDirectory); } - //var resourceDirectories = fs.readdirSync(builtLocalResourcesDirectory).map(function(p) { return path.join(builtLocalResourcesDirectory, p); }); - //resourceDirectories.map(function(d) { - // jake.cpR(d, LKGResourcesDirectory); - //}); + + const sizeAfter = getDirSize(LKGDirectory); + if (sizeAfter > (sizeBefore * 1.10)) { + throw new Error("The lib folder increased by 10% or more. This likely indicates a bug."); + } }); // Test directory From 8b034e6cd89fe51360b7316cad166f1ee712345e Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 7 Jun 2018 20:58:29 -0400 Subject: [PATCH 7/7] Modernize syntax by using arrow funcs --- Jakefile.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Jakefile.js b/Jakefile.js index fed1bf3e7fa..a6483355c73 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -643,23 +643,19 @@ task("generate-spec", [specMd]); // Makes a new LKG. This target does not build anything, but errors if not all the outputs are present in the built/local directory desc("Makes a new LKG out of the built js files"); -task("LKG", ["clean", "release", "local"].concat(libraryTargets), function () { +task("LKG", ["clean", "release", "local"].concat(libraryTargets), () => { const sizeBefore = getDirSize(LKGDirectory); var expectedFiles = [tscFile, servicesFile, serverFile, nodePackageFile, nodeDefinitionsFile, standaloneDefinitionsFile, tsserverLibraryFile, tsserverLibraryDefinitionFile, cancellationTokenFile, typingsInstallerFile, buildProtocolDts, watchGuardFile]. concat(libraryTargets). concat(localizationTargets); - var missingFiles = expectedFiles.filter(function (f) { - return !fs.existsSync(f); - }); + var missingFiles = expectedFiles.filter(f => !fs.existsSync(f)); if (missingFiles.length > 0) { fail(new Error("Cannot replace the LKG unless all built targets are present in directory " + builtLocalDirectory + ". The following files are missing:\n" + missingFiles.join("\n"))); } // Copy all the targets into the LKG directory jake.mkdirP(LKGDirectory); - for (i in expectedFiles) { - jake.cpR(expectedFiles[i], LKGDirectory); - } + expectedFiles.forEach(f => jake.cpR(f, LKGDirectory)); const sizeAfter = getDirSize(LKGDirectory); if (sizeAfter > (sizeBefore * 1.10)) {