From 73f375252f3e9f36d16e9f675290aa8e24a98a39 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Tue, 9 May 2017 22:04:59 -0600
Subject: [PATCH 1/5] Automatically install dependencies
---
nodebb | 44 +++++++++++++++++++++-----------------------
1 file changed, 21 insertions(+), 23 deletions(-)
diff --git a/nodebb b/nodebb
index 22051bb810..50bcc65fee 100755
--- a/nodebb
+++ b/nodebb
@@ -2,36 +2,34 @@
'use strict';
-var cproc;
-var args;
-var fs;
-var path;
-var request;
-var semver;
-var prompt;
-var async;
+var fs = require('fs');
+var path = require('path');
+var cproc = require('child_process');
+// check to make sure dependencies are installed
try {
- require('colors');
- cproc = require('child_process');
- args = require('minimist')(process.argv.slice(2));
- fs = require('fs');
- path = require('path');
- request = require('request');
- semver = require('semver');
- prompt = require('prompt');
- async = require('async');
+ fs.readFileSync(path.join(__dirname, 'node_modules/async/package.json'));
} catch (e) {
- if (e.code === 'MODULE_NOT_FOUND') {
- process.stdout.write('NodeBB could not be started because it\'s dependencies have not been installed.\n');
- process.stdout.write('Please ensure that you have executed "npm install --production" prior to running NodeBB.\n\n');
- process.stdout.write('For more information, please see: https://docs.nodebb.org/en/latest/installing/os.html\n\n');
- process.stdout.write('Could not start: ' + e.code + '\n');
+ if (e.code === 'ENOENT') {
+ process.stdout.write('Dependencies not yet installed.\n');
+ process.stdout.write('Installing them now...\n\n');
- process.exit(1);
+ cproc.execSync('npm i --production', {
+ cwd: __dirname,
+ stdio: [0, 1, 2],
+ });
+ } else {
+ throw e;
}
}
+require('colors');
+var args = require('minimist')(process.argv.slice(2));
+var request = require('request');
+var semver = require('semver');
+var prompt = require('prompt');
+var async = require('async');
+
var loaderPath = path.join(__dirname, 'loader.js');
var appPath = path.join(__dirname, 'app.js');
From eedc0889fc1b4b3a42c49aae996a770b3ab6f7e4 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Tue, 9 May 2017 22:08:28 -0600
Subject: [PATCH 2/5] Fix failed lint
---
app.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app.js b/app.js
index 0e5b8ff69b..edb8565559 100644
--- a/app.js
+++ b/app.js
@@ -203,7 +203,7 @@ function upgrade() {
// Skip build
tasks.pop();
}
- //disable mongo timeouts during upgrade
+ // disable mongo timeouts during upgrade
nconf.set('mongo:options:socketTimeoutMS', 0);
async.series(tasks, function (err) {
if (err) {
From 970c7a8caa7a91a3ee7895b85b54de7f6ed11b9f Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Tue, 9 May 2017 22:20:40 -0600
Subject: [PATCH 3/5] Defer winston logging until after tests
---
test/defer-logger.js | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
create mode 100644 test/defer-logger.js
diff --git a/test/defer-logger.js b/test/defer-logger.js
new file mode 100644
index 0000000000..3ddb9de45c
--- /dev/null
+++ b/test/defer-logger.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var util = require('util');
+var winston = require('winston');
+
+function DeferLogger(options) {
+ options = options || {};
+
+ this.name = 'DeferLogger';
+ this.level = options.level || 'info';
+
+ this.logged = options.logged;
+}
+
+util.inherits(DeferLogger, winston.Transport);
+
+DeferLogger.prototype.log = function log(level, msg, meta, callback) {
+ this.logged.push([level, msg, meta]);
+ callback(null, true);
+};
+
+var winstonLogged = [];
+
+before(function () {
+ // defer winston logs until the end
+ winston.remove(winston.transports.Console);
+
+ winston.add(DeferLogger, {
+ logged: winstonLogged,
+ });
+});
+
+after(function () {
+ console.log('\n\n');
+
+ var con = new winston.transports.Console();
+ winstonLogged.forEach(function (args) {
+ con.log(args[0], args[1], args[2], function () {});
+ });
+});
From 759c3f5584efdaace97ae6795f48ec1755facad4 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Tue, 9 May 2017 22:39:04 -0600
Subject: [PATCH 4/5] Fix soundpacks not working
---
src/plugins/load.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/plugins/load.js b/src/plugins/load.js
index f4ba868eea..04b65e9163 100644
--- a/src/plugins/load.js
+++ b/src/plugins/load.js
@@ -263,12 +263,12 @@ module.exports = function (Plugins) {
soundpack.id = pluginData.id;
soundpack.dir = path.join(pluginData.path, soundpack.dir);
async.each(Object.keys(soundpack.sounds), function (key, next) {
- file.exists(path.join(soundpack.dir, soundpack.sounds[key]), function (exists) {
+ file.exists(path.join(soundpack.dir, soundpack.sounds[key]), function (err, exists) {
if (!exists) {
delete soundpack.sounds[key];
}
- next();
+ next(err);
});
}, function (err) {
if (err) {
From bd6aca7d9473f37adeadc7df0fd5be6b5358e872 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Wed, 10 May 2017 15:05:54 -0600
Subject: [PATCH 5/5] More friendly error message if module loading fails
---
nodebb | 30 ++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/nodebb b/nodebb
index 50bcc65fee..2b71185d4e 100755
--- a/nodebb
+++ b/nodebb
@@ -23,12 +23,30 @@ try {
}
}
-require('colors');
-var args = require('minimist')(process.argv.slice(2));
-var request = require('request');
-var semver = require('semver');
-var prompt = require('prompt');
-var async = require('async');
+var minimist;
+var request;
+var semver;
+var prompt;
+var async;
+
+try {
+ require('colors');
+ minimist = require('minimist');
+ request = require('request');
+ semver = require('semver');
+ prompt = require('prompt');
+ async = require('async');
+} catch (e) {
+ process.stdout.write(
+ '\x1b[31mNodeBB could not be initialised because there was an error while loading dependencies.\n' +
+ 'Please run "\x1b[33mnpm install --production\x1b[31m" and try again.\x1b[0m\n\n' +
+ 'For more information, please see: https://docs.nodebb.org/en/latest/installing/os.html\n\n'
+ );
+
+ throw e;
+}
+
+var args = minimist(process.argv.slice(2));
var loaderPath = path.join(__dirname, 'loader.js');
var appPath = path.join(__dirname, 'app.js');