diff --git a/History.md b/History.md index 5ec2d0a1fa..32bdc65cd6 100644 --- a/History.md +++ b/History.md @@ -1,6 +1,63 @@ ## vNEXT +## v0.4.1 + +* New `email` smart package, with [`Email.send`](http://docs.meteor.com/#email) + API. + +* Upgrade Node from 0.6.17 to 0.8.8, as well as many Node modules in the dev + bundle; those that are user-exposed are: + * coffee-script: 1.3.3 (from 1.3.1) + * stylus: 0.29.0 (from 0.28.1) + * nib: 0.8.2 (from 0.7.0) + +* All publicly documented APIs now use `camelCase` rather than + `under_scores`. The old spellings continue to work for now. New names are: + - `Meteor.isClient`/`isServer` + - `this.isSimulation` inside a method invocation + - `Meteor.deps.Context.onInvalidate` + - `Meteor.status().retryCount`/`retryTime` + +* Spark improvements + * Optimize selector matching for event maps. + * `Spark._currentRenderer` shouldn't persist into timer callbacks. + * Fix bug caused by interaction between `Template.foo.preserve` and + `{{#constant}}`. #323 + * Allow `{{#each}}` over a collection of objects without `_id`. #281 + * Added a script to build a standalone spark.js that does not depend on + Meteor. + * Meteor and Spark no longer depend on jQuery unless you need IE7 + support. (All Meteor apps still include jQuery, for now.) + +* If you use `Meteor.setTimer`/`setInterval`/`defer` inside a method invocation, + and the callback is invoked before all writes directly created by the + invocation are committed, and the callback creates writes, then those writes + will be added to the same "write fence" as the method's own writes, causing + the client to wait for those writes to be committed before quiescing. + +* Make `Meteor.Cursor.forEach` fully synchronous even if the user's callback + yields. #321. + +* Upgrade bootstrap to version 2.1.1. #336, #337, #288, #293 + +* Change the implementation of the `meteor deploy` password prompt to not crash + Emacs M-x shell. + +* Optimize `LocalCollection.remove(id)` to be O(1) rather than O(n). + +* Avoid running full query result diffs on the client when unnecessary. + +* Better error reporting when a package in `.meteor/packages` does not exist. + +* Better error reporting for coffeescript. #331 + +* Better error handling in `Handlebars.Exception`. + + +Patches contributed by GitHub users fivethirty, tmeasday, and xenolf. + + ## v0.4.0 * Merge Spark, a new live page update engine diff --git a/admin/debian/rules b/admin/debian/rules index 7b223eeb5e..6a83b44185 100755 --- a/admin/debian/rules +++ b/admin/debian/rules @@ -17,11 +17,5 @@ override_dh_prep: tar -C debian/tmp/usr/lib -xzf $(TARBALL) echo -n 'deb' > debian/tmp/usr/lib/meteor/.package_stamp -# node fibers distributes copies of the library pre-compiled for many -# different architectures. This confuses shlibdeps. Just ignore the -# fibers library. -override_dh_shlibdeps: - dh_shlibdeps -Xfibers.node - %: dh $@ diff --git a/admin/generate-dev-bundle.sh b/admin/generate-dev-bundle.sh index efc27770e6..6f495e7c2d 100755 --- a/admin/generate-dev-bundle.sh +++ b/admin/generate-dev-bundle.sh @@ -1,8 +1,9 @@ #!/bin/bash set -e +set -u -BUNDLE_VERSION=0.2.2 +BUNDLE_VERSION=0.2.3 UNAME=$(uname) ARCH=$(uname -m) @@ -182,7 +183,6 @@ npm install mongodb@1.1.5 npm install uglify-js@1.3.3 npm install clean-css@0.6.0 npm install progress@0.0.5 -npm install fibers@0.6.9 npm install useragent@1.1.0 npm install request@2.11.0 npm install http-proxy@0.8.2 @@ -201,6 +201,19 @@ git clone http://github.com/akdubya/rbytes.git npm install sockjs@0.3.1 rm -rf rbytes +npm install fibers@0.6.9 +# Fibers ships with compiled versions of its C code for a dozen platforms. This +# bloats our dev bundle, and confuses dpkg-buildpackage and rpmbuild into +# thinking that the packages need to depend on both 32- and 64-bit versions of +# libstd++. Remove all the ones other than our architecture. (Expression based +# on build.js in fibers source.) +FIBERS_ARCH=$(node -p -e 'process.platform + "-" + process.arch + "-v8-" + /[0-9]+\.[0-9]+/.exec(process.versions.v8)[0]') +cd fibers/bin +mv $FIBERS_ARCH .. +rm -rf * +mv ../$FIBERS_ARCH . +cd ../.. + cd "$DIR" curl "$MONGO_URL" | tar -xz diff --git a/admin/node.sh b/admin/node.sh index 3326cd3bc8..ba712deb85 100755 --- a/admin/node.sh +++ b/admin/node.sh @@ -12,4 +12,4 @@ fi cd "$ORIGDIR" export NODE_PATH="$TOPDIR/dev_bundle/lib/node_modules" -exec "$TOPDIR/dev_bundle/bin/node" $* +exec "$TOPDIR/dev_bundle/bin/node" "$@" diff --git a/meteor b/meteor index 34c354c120..70e583c498 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/bin/bash -BUNDLE_VERSION=0.2.2 +BUNDLE_VERSION=0.2.3 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/packages/domutils/domutils.js b/packages/domutils/domutils.js index fdc7e6efb7..53f266d601 100644 --- a/packages/domutils/domutils.js +++ b/packages/domutils/domutils.js @@ -5,11 +5,10 @@ DomUtils = {}; (function () { var qsaFindAllBySelector = function (selector, contextNode) { + // If IE7 users report the following error message, you + // can fix it with "meteor add jquery". if (! document.querySelectorAll) - // IE 7 - throw new Error( - "This browser doesn't support querySelectorAll. " + - "You need Sizzle or jQuery (`meteor add jquery`)."); + throw new Error("This browser doesn't support querySelectorAll."); // the search is constrained to descendants of `ancestor`, // but it doesn't affect the scope of the query. diff --git a/packages/livedata/livedata_server.js b/packages/livedata/livedata_server.js index 5454629b40..e10c9d73de 100644 --- a/packages/livedata/livedata_server.js +++ b/packages/livedata/livedata_server.js @@ -314,7 +314,13 @@ _.extend(Meteor._LivedataSession.prototype, { else self.universal_subs.push(sub); - var res = handler.apply(sub, params || []); + try { + var res = handler.apply(sub, params || []); + } catch (e) { + Meteor._debug("Internal exception while starting subscription", sub_id, + e.stack); + return; + } // if Meteor._RemoteCollectionDriver is available (defined in // mongo-livedata), automatically wire up handlers that return a diff --git a/packages/tinytest/package.js b/packages/tinytest/package.js index f60b29f4bd..893c78500d 100644 --- a/packages/tinytest/package.js +++ b/packages/tinytest/package.js @@ -4,6 +4,11 @@ Package.describe({ }); Package.on_use(function (api) { + // "past" is always included before app code (see init_from_app_dir) but not + // before packages when testing. This makes sure that tests see + // backward-compatibility hooks, at least if they use tinytest. + api.use('past'); + api.use('underscore', ['client', 'server']); api.add_files('tinytest.js', ['client', 'server']);