From 70cc03cfbf1412966427de9bc2a80522844412d8 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Tue, 30 Jun 2015 02:23:44 -0700 Subject: [PATCH] catch errors running registerCompiler callback also, add XXX comments about the (very old) issue that source map filenames are wrong for plugin files --- tools/build-plugin.js | 17 +++++-- .../.meteor/platforms | 2 - .../.meteor/versions | 49 ------------------- .../packages/build-plugin/package.js | 2 +- tools/tests/batch-plugins.js | 18 +++++++ tools/tests/source-maps.js | 5 +- 6 files changed, 35 insertions(+), 58 deletions(-) delete mode 100644 tools/tests/apps/build-plugin-throws-error/.meteor/platforms delete mode 100644 tools/tests/apps/build-plugin-throws-error/.meteor/versions diff --git a/tools/build-plugin.js b/tools/build-plugin.js index 88e1053e69..64d49dc123 100644 --- a/tools/build-plugin.js +++ b/tools/build-plugin.js @@ -27,11 +27,18 @@ _.extend(exports.SourceProcessor.prototype, { } // XXX BBP proper error handling --- this is running user-supplied plugin // code, and use markBoundary too - self.userPlugin = self.factoryFunction.call(null); - // If we have a disk cache directory and the plugin wants it, use it. - // XXX BBP proper error handling - if (self.isopack.pluginCacheDir && self.userPlugin.setDiskCacheDirectory) { - self.userPlugin.setDiskCacheDirectory(self.isopack.pluginCacheDir); + try { + self.userPlugin = buildmessage.markBoundary(self.factoryFunction).call( + null); + // If we have a disk cache directory and the plugin wants it, use it. + if (self.isopack.pluginCacheDir && + self.userPlugin.setDiskCacheDirectory) { + const markedMethod = buildmessage.markBoundary( + self.userPlugin.setDiskCacheDirectory.bind(self.userPlugin)); + markedMethod(self.isopack.pluginCacheDir); + } + } catch (e) { + buildmessage.exception(e); } }, relevantForArch: function (arch) { diff --git a/tools/tests/apps/build-plugin-throws-error/.meteor/platforms b/tools/tests/apps/build-plugin-throws-error/.meteor/platforms deleted file mode 100644 index efeba1b50c..0000000000 --- a/tools/tests/apps/build-plugin-throws-error/.meteor/platforms +++ /dev/null @@ -1,2 +0,0 @@ -server -browser diff --git a/tools/tests/apps/build-plugin-throws-error/.meteor/versions b/tools/tests/apps/build-plugin-throws-error/.meteor/versions deleted file mode 100644 index 53bbde7d41..0000000000 --- a/tools/tests/apps/build-plugin-throws-error/.meteor/versions +++ /dev/null @@ -1,49 +0,0 @@ -autopublish@1.0.3 -autoupdate@1.2.1 -base64@1.0.3 -binary-heap@1.0.3 -blaze@2.1.2 -blaze-tools@1.0.3 -boilerplate-generator@1.0.3 -build-plugin@0.0.1 -callback-hook@1.0.3 -check@1.0.5 -ddp@1.1.0 -deps@1.0.7 -ejson@1.0.6 -fastclick@1.0.3 -geojson-utils@1.0.3 -html-tools@1.0.4 -htmljs@1.0.4 -http@1.1.0 -id-map@1.0.3 -insecure@1.0.3 -jquery@1.11.3_2 -json@1.0.3 -launch-screen@1.0.2 -livedata@1.0.13 -logging@1.0.7 -meteor@1.1.6 -meteor-platform@1.2.2 -minifiers@1.1.5 -minimongo@1.0.8 -mobile-status-bar@1.0.3 -mongo@1.1.0 -observe-sequence@1.0.6 -ordered-dict@1.0.3 -random@1.0.3 -reactive-dict@1.1.0 -reactive-var@1.0.5 -reload@1.1.3 -retry@1.0.3 -routepolicy@1.0.5 -session@1.1.0 -spacebars@1.0.6 -spacebars-compiler@1.0.6 -templating@1.1.1 -tracker@1.0.7 -ui@1.0.6 -underscore@1.0.3 -url@1.0.4 -webapp@1.2.0 -webapp-hashing@1.0.3 diff --git a/tools/tests/apps/build-plugin-throws-error/packages/build-plugin/package.js b/tools/tests/apps/build-plugin-throws-error/packages/build-plugin/package.js index 567afd6b66..364d554e85 100644 --- a/tools/tests/apps/build-plugin-throws-error/packages/build-plugin/package.js +++ b/tools/tests/apps/build-plugin-throws-error/packages/build-plugin/package.js @@ -11,6 +11,6 @@ Package.describe({ }); Package.registerBuildPlugin({ - name: "build-plugin", + name: "build-plugin-itself", sources: [ "build-plugin.js" ] }); diff --git a/tools/tests/batch-plugins.js b/tools/tests/batch-plugins.js index 2ed11b088c..06f321cf5d 100644 --- a/tools/tests/batch-plugins.js +++ b/tools/tests/batch-plugins.js @@ -240,3 +240,21 @@ selftest.define("compiler plugins - inactive source", () => { run.stop(); }); + +// Test error when the registerCompiler callback throws. +selftest.define("compiler plugins - compiler throws", () => { + const s = new Sandbox({ fakeMongo: true }); + + s.createApp('myapp', 'compiler-plugin-throws-on-instantiate'); + s.cd('myapp'); + + const run = s.run('add', 'local-plugin'); + run.matchErr('Errors while adding packages'); + run.matchErr('While building package local-plugin'); + // XXX This is wrong! The path on disk is packages/local-plugin/plugin.js, but + // at some point we switched to the servePath which is based on the *plugin*'s + // "package" name. + run.matchErr('packages/compilePrintme/plugin.js:5:1: Error in my ' + + 'registerCompiler callback!'); + run.expectExit(1); +}); diff --git a/tools/tests/source-maps.js b/tools/tests/source-maps.js index fa4c6d9991..7d77d5a4a3 100644 --- a/tools/tests/source-maps.js +++ b/tools/tests/source-maps.js @@ -89,6 +89,9 @@ selftest.define("source maps from a build plugin implementation", ['checkout'], s.cd("myapp"); var run = s.run("run"); run.waitSecs(10); - run.match(/packages\/build-plugin\/build-plugin.js:2:1/); + // XXX This is wrong! The path on disk is + // packages/build-plugin/build-plugin.js, but at some point we switched to the + // servePath which is based on the *plugin*'s "package" name. + run.match(/packages\/build-plugin-itself\/build-plugin.js:2:1/); run.stop(); });