From a467255d9c5b4bf46da54980aeecd03dbadef351 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 26 Feb 2020 11:21:40 -0500 Subject: [PATCH] Use IPC message to handle .reload command in meteor shell. I considered using a nonzero process.exit code, but I didn't want to run any risk of reusing a meaningful code, and the accepted range of codes unfortunately does not include parseInt("reload", 36), or 1657112629. Should fix #10934. --- packages/shell-server/package.js | 2 +- packages/shell-server/shell-server.js | 9 ++++++++- tools/runners/run-app.js | 8 ++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/shell-server/package.js b/packages/shell-server/package.js index e1d9cf4af3..c8b11d80d2 100644 --- a/packages/shell-server/package.js +++ b/packages/shell-server/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "shell-server", - version: "0.4.0", + version: "0.5.0", summary: "Server-side component of the `meteor shell` command.", documentation: "README.md" }); diff --git a/packages/shell-server/shell-server.js b/packages/shell-server/shell-server.js index 7bba75f3e7..73b62eb214 100644 --- a/packages/shell-server/shell-server.js +++ b/packages/shell-server/shell-server.js @@ -12,6 +12,9 @@ import { import { createServer } from "net"; import { start as replStart } from "repl"; +// Enable process.sendMessage for communication with build process. +import "meteor/inter-process-messaging"; + const INFO_FILE_MODE = parseInt("600", 8); // Only the owner can read or write. const EXITING_MESSAGE = "Shell exiting..."; @@ -308,7 +311,11 @@ class Server { repl.defineCommand("reload", { help: "Restart the server and the shell", action: function() { - process.exit(0); + if (process.sendMessage) { + process.sendMessage("shell-server", { command: "reload" }); + } else { + process.exit(0); + } } }); } diff --git a/tools/runners/run-app.js b/tools/runners/run-app.js index a082f43c6d..9d67c146a8 100644 --- a/tools/runners/run-app.js +++ b/tools/runners/run-app.js @@ -767,6 +767,14 @@ _.extend(AppRunner.prototype, { var serverWatcher; var clientWatcher; + appProcess.proc.onMessage("shell-server", message => { + if (message && message.command === "reload") { + self._resolvePromise("run", { outcome: "changed" }); + } else { + return Promise.reject("Unsupported shell command: " + message); + } + }); + if (self.watchForChanges) { serverWatcher = new watch.Watcher({ watchSet: serverWatchSet,