Commit Graph

6643 Commits

Author SHA1 Message Date
Ben Newman
87ebeec54b Detect inspector client attachment by timing debugger keyword. (#9172)
The `meteor debug` command behaves like Node's `--inspect-brk` flag, in
that it attempts to pause the server before executing any server code.

However, simply passing the `--inspect-brk` flag to Node causes execution
to pause on the very first line of code, which is not good for setting any
breakpoints, because no server code has actually loaded yet.

Instead, the `meteor debug` command uses Node's `--inspect` flag to enable
debugging without an initial pause, then manually pauses at an appropriate
moment during server startup. Ideally, the pause should last until an
inspector client has been attached to the process, at which point the
developer has a chance to set any desired breakpoints, then clicks the
continue button to proceed with server startup.

The most difficult part of this process is detecting when the inspector
client has attached. Previously, the parent process listened for the child
process to print a "Debugger attached" message to STDERR, which happens as
a result of this `fprintf` call in Native C++:
7cff6e80bf/src/inspector_io.cc (L396)

However, this message was not printed in some cases, especially on Windows
(#9165), and required inter-process communication even in the ideal case.
All of that logic is gone now, thanks to this commit.

This commit takes advantage of a difference in behavior of the `debugger`
keyword depending on whether or not an inspector client is attached. When
no client is attached, the `debugger` keyword is a no-op that takes no
time (or very little time) to execute. Once a client has attached, the
`debugger` keyword triggers a breakpoint that lasts until the developer
explicitly continues execution through the client UI. Needless to say,
this makes the `debugger` keyword take longer than a no-op.

Because the `debugger` keyword does nothing until a client connects, we
can safely poll a `pause` function containing a `debugger` keyword at a
frequent interval (say, every 500ms). Once a client connects, the
`debugger` keyword will become active, pausing the server at exactly the
point we hoped. The difference is easy to detect by timing the `pause()`
function call. Once the `debugger` keyword becomes active, we stop polling
and allow server startup to continue.

Elegant!

Fixes #9165.
2017-10-03 12:11:21 -04:00
Ben Newman
1a8efdc31f Merge branch 'devel' into release-1.6 2017-10-02 13:44:25 -04:00
Ben Newman
e85c69680d Combine all isopackets to share transitive dependencies. (#9168)
By my calculations, the sum of the sizes of the individual isopackets was
152MB, and the size of the combined isopacket is now just 36MB. That
remarkable difference goes to show how much duplication of transitive
dependencies was happening before this change.

That's a savings of 116MB for the (uncompressed) size of the meteor-tool
package. In Meteor 1.5.x, the meteor-tool package is about 544MB, but in
Meteor 1.6 it's considerably smaller: 373MB. In other words, this change
should reduce those sizes to 428MB (-21%) and 257MB (-31%), respectively.
2017-10-02 13:41:39 -04:00
Jesse Rosenberger
efcc6945ba Update the modules test app to Meteor 1.5.2.2. 2017-10-02 17:47:12 +03:00
Ben Newman
dc95428ecb Merge branch 'devel' into release-1.6 2017-09-29 18:07:21 -04:00
Ben Newman
462a29702d Make Npm.require import built-in modules first. 2017-09-28 17:21:17 +03:00
Ben Newman
95dbcf28d7 Make Npm.require import built-in modules first. 2017-09-26 14:47:57 -04:00
Hugh Willson
1ab30946d8 Update cordova-ios to 4.5.1, to add in iOS 11 / Xcode 9 support
Fixes #9098.
Fixes #9126.
2017-09-26 14:08:04 -04:00
Ben Newman
8ed3d333f9 Merge branch 'devel' into release-1.6 2017-09-26 12:31:40 -04:00
Ben Newman
cf45eb0f8c Update the modules test app to Meteor 1.5.2.1. 2017-09-26 12:29:04 -04:00
Ben Newman
cc47ba4a6f Update dynamic-import test app to Meteor 1.5.2.1. 2017-09-25 20:24:49 -04:00
Ben Newman
750d11e853 Merge branch 'master' into release-1.5.2.1 2017-09-25 17:36:31 -04:00
Ben Newman
5947df645a Allow Npm.require to find packages in application node_modules.
This used to "work" (somewhat accidentally) before we got stricter about
which `node_modules` directories `Npm.require` can search:
971d2b1272

This commit should fix the problem with `juliancwirko:postcss` reported
here: https://github.com/meteor/meteor/issues/9094#issuecomment-331964596

Note that this only works for `Npm.require` when called during the build
process, not at application runtime. Use ordinary `require` for that.
2017-09-25 16:43:05 -04:00
Ben Newman
38b5ac9ed3 Revert core package upgrades to Babel 7 for now.
While Babel 7 seems to work perfectly well, and the process of upgrading
has been useful, the upgrade is going to require Meteor developers to
update the babel-runtime npm package and their .babelrc plugins, a chore
with which Meteor can't help very much.

On top of that, Babel 7 is still in early beta. I don't want to ship
Meteor 1.6 with a critical component that could change in unexpected ways,
and I don't want to wait for Babel 7 to be finalized to ship Meteor 1.6.

Note that the Meteor command-line tool is still implemented using Babel 7,
which has historically been a great way to gain confidence in
Babel-related changes before pushing them out to all Meteor developers.

@GeoffreyBooth This should take some pressure off the CoffeeScript upgrade
for now. Let's aim for Meteor 1.6.1 for Babel 7 and CoffeeScript 2.0.
2017-09-22 17:19:26 -04:00
Ben Newman
f52125d777 Merge branch 'devel' into release-1.6 2017-09-22 16:35:59 -04:00
Ben Newman
022f87c5b1 Avoid stopping fs.watchFile pollers when rewatching.
Calling unwatchFile may result in stopping the watcher before watchFile is
called, which then restarts it. This temporary stoppage appears to cause
change events to be missed sometimes. In particular, preventing this
stop/start with the acrobatics in this commit seems to fix recent
compiler-plugins.js test failures.
2017-09-22 15:00:17 -04:00
Ben Newman
7fd4fd559b Support .meteorignore files.
Closes https://github.com/meteor/meteor-feature-requests/issues/5.
2017-09-22 08:47:37 -04:00
Ben Newman
f4f4fd9994 Optimistically depend on parent directory when file does not exist.
With any luck, this will solve a host of problems related to undetected
changes when new files are created.
2017-09-22 08:47:36 -04:00
cyrille
a5f27fa723 Fix App.icons documentation typo 2017-09-22 13:09:42 +02:00
Ben Newman
3a5a52e869 Merge branch 'devel' into release-1.6 2017-09-20 16:36:41 -04:00
Ben Newman
069d3dffe7 Additional timeout for duplicate extension compiler plugins test. 2017-09-20 16:33:52 -04:00
Jesse Rosenberger
d50b83cc47 When starting mongod, yield until the heartbeat has pulsed after election. (#9119)
* When awaiting Mongo, wait until the heartbeat has pulsed after election.

> Prologue: A heartbeat is used amongst members of a MongoDB replica set
to poll the status of said members.

When we are initiating a new replicaset for the test Mongo server, the
replicaset is not fully prepared to accept writes until the voting
members have negotiated and propagated their decision about who is the
"primary" to all members involved.  This seems to be delayed by almost
_exactly_ the default heartbeat interval, which is 2000ms.

The heartbeat interval is marked as an "internal only" property in Mongo
so I was hesitant to lower it.  It's also a new property in Mongo 3.2
which might explain why this cropped up a while ago.

I believe this heartbeat delay is the only explanation for why the
`rs.status()` (i.e. `replSetGetStatus`) believes it is ready before the
`mongod` has actually printed "transition to primary complete" to the
log.

Fixes meteor/meteor#9026.

* Replace addl. variable occurrence with the new `firstMemberState` var.
2017-09-20 14:51:54 -04:00
Ben Newman
eec8a1f8e9 Merge branch 'devel' into release-1.6 2017-09-18 17:25:11 -04:00
Ben Newman
e59e0a582a Convert \s to /s in Npm.require'd module identifiers.
This is another way of addressing the problem I attempted to fix with
f34c5ec926 earlier today.

Apparently, older versions of compiler plugin-registering packages such as
standard-minifier-css and templating-compiler still depend on older
versions of the meteor package, which may still use path.join to import
fibers/future. This can be fixed by republishing those packages, as I did
in 917b01ac5f, but I'd prefer not to
republish every compiler plugin package.

Fortunately, we can also solve the problem by being more tolerant in the
implementation of Npm.require, which is what this commit does.
2017-09-18 16:54:23 -04:00
Ben Newman
c7612c18e7 Merge branch 'devel' into release-1.6 2017-09-18 14:27:11 -04:00
Ben Newman
565e6904d7 Avoid using meteor/tools/node_modules symlink (missing on Windows). 2017-09-18 14:22:41 -04:00
Ben Newman
7ebf9b3497 Merge branch 'devel' into release-1.6 2017-09-18 12:45:34 -04:00
Ben Newman
7cbb2bb579 Tolerate : or _ in dynamic version identifiers, and add tests.
Follow-up to #9103.
2017-09-18 12:34:47 -04:00
Ben Newman
971d2b1272 Standardize Npm.require exceptions and limit lookup paths. (#9095)
Ever since Meteor 1.3 first introduced a module system based on something
other than `Npm.require`, we've continued throwing missing module
exceptions that refer to `Npm.depends` and/or `Npm.require`, even if the
developer called `require` or used an `import` declaration. This commit
fixes that, so that all missing module exceptions look like 'Cannot find
module "module/name"'.

I also noticed recently that `Npm.require` is capable of returning modules
installed in `node_modules` directories completely outside the app, which
is bad news for development/production reproducibility. Fixed that too.

CC @hwillson who has spoken of deprecating `Npm.require` entirely, and
just using `require` everywhere, instead.
2017-09-18 11:39:45 -04:00
Ben Newman
34f49fa519 Upgrade babel-runtime dependency of a few more test apps. 2017-09-15 17:11:37 -04:00
Ben Newman
3e426ffde3 Upgrade babel-runtime dependency of dynamic-import test app. 2017-09-14 18:20:00 -04:00
Ben Newman
f90bc3f29e Upgrade babel-runtime dependency of modules test app. 2017-09-14 18:20:00 -04:00
Ben Newman
2b8199c76b Upgrade babel-compiler and ecmascript to Babel 7.
Specifically, as of this commit, Babel 7.0.0-beta.0.
2017-09-14 18:20:00 -04:00
Ben Newman
0d26adfee5 Merge branch 'devel' into release-1.6 2017-09-13 12:27:45 -04:00
Christian Klaussner
c5960a6509 Add shell-server package to scaffold app skeleton (#9085) 2017-09-13 11:50:48 -04:00
Ben Newman
e94349937e Update dynamic-import test app to Meteor 1.5.2. 2017-09-11 15:32:39 -04:00
Ben Newman
d6666c96f5 Update modules test app to Meteor 1.5.2. 2017-09-11 15:27:25 -04:00
Ben Newman
31fa502148 Enable transform-do-expressions in production for modules test app. 2017-09-11 15:24:47 -04:00
Ben Newman
08eb1f28a9 Merge branch 'devel' into release-1.6 2017-09-06 12:18:49 -04:00
Ben Newman
0d7ce023e0 Merge pull request #8702 from vlasky/devel
Support for UNIX sockets (#7392)
2017-09-06 11:11:51 -04:00
Hugh Willson
050688d81b Merge branch 'devel' into devel 2017-08-23 11:03:10 -04:00
Ben Newman
dd5d7e2786 Merge branch 'release-1.5.2' into release-1.6 2017-08-22 22:04:03 -04:00
Ben Newman
754b0c5abc Merge branch 'devel' into release-1.5.2 2017-08-22 20:55:33 -04:00
Ben Newman
67b76abc78 Make node-gyp look for headers in dev_bundle/include/node.
Thanks to @abernix for identifying this solution to the duplication
between dev_bundle/include/node and dev_bundle/.node-gyp/*/node.
2017-08-22 16:41:01 -04:00
Jesse Rosenberger
20c5036541 Fix auto-install of cordova-lib during meteor build.
As a follow-up to meteor/meteor#8976, this properly installs
the `cordova-lib` package when during a `meteor build`.

Addresses: https://github.com/meteor/meteor/pull/8728#issuecomment-323493331,
as reported by @markoshust.
2017-08-22 23:06:22 +03:00
Hugh Willson
e027a46d71 Add missing CLI help for test/test-packages --driver-package (#9035) 2017-08-22 15:57:43 -04:00
Ben Newman
00ff851352 Avoid calling files.statOrNull(absPath) in readAndWatchFileWithHash.
This is performance-sensitive code, and I think this extra (uncached) call
to files.statOrNull could be contributing to test timeouts on Circle CI.

Follow-up to #9030.
2017-08-22 13:40:19 -04:00
Hugh Willson
b498c41401 Avoid creating a watcher when --settings is set to a directory (#9030)
As outlined in #3854, if `meteor --settings` points to a
directory instead of a file, an application gets caught up
in an infinite rebuild loop. Since it was assumed only a
file would be configured via `--settings`, a file watcher
is created for the specified directory, and that watcher
is then triggered ad infinitum.

These changes prevent a file watcher from being created
on a `--settings` directory.
2017-08-21 16:25:15 -04:00
Hugh Willson
cc5525f9a8 Use UNIX_SOCKET_PATH instead of PORT for socket files. 2017-08-18 08:44:34 -04:00
Ben Newman
6804aedc6c Merge branch 'release-1.5.2' into release-1.6 2017-08-17 10:19:46 -04:00