Skip to content

Commit 58eb131

Browse files
authored
Add CLI test for starting/stopping from a directory with space (#1068)
1 parent 437ca4a commit 58eb131

File tree

6 files changed

+359
-85
lines changed

6 files changed

+359
-85
lines changed

lib/forever.js

Lines changed: 78 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@
66
*
77
*/
88

9-
var fs = require('fs'),
10-
path = require('path'),
11-
events = require('events'),
12-
exec = require('child_process').exec,
13-
spawn = require('child_process').spawn,
14-
cliff = require('cliff'),
15-
nconf = require('nconf'),
16-
nssocket = require('nssocket'),
17-
utile = require('utile'),
18-
winston = require('winston'),
19-
mkdirp = require('mkdirp'),
20-
async = require('async'),
21-
configUtils = require('./util/config-utils');
22-
23-
var forever = exports;
9+
const fs = require("fs"),
10+
path = require("path"),
11+
events = require("events"),
12+
exec = require("child_process").exec,
13+
spawn = require("child_process").spawn,
14+
cliff = require("cliff"),
15+
nconf = require("nconf"),
16+
nssocket = require("nssocket"),
17+
utile = require("utile"),
18+
winston = require("winston"),
19+
mkdirp = require("mkdirp"),
20+
async = require("async"),
21+
configUtils = require("./util/config-utils");
22+
23+
const forever = exports;
2424

2525
//
2626
// Setup `forever.log` to be a custom `winston` logger.
@@ -68,7 +68,7 @@ exports.version = require('../package').version;
6868
// then it is created using `mkdirp`.
6969
//
7070
function getSockets(sockPath, callback) {
71-
var sockets;
71+
let sockets;
7272

7373
try {
7474
sockets = fs.readdirSync(sockPath);
@@ -92,11 +92,11 @@ function getSockets(sockPath, callback) {
9292
// Returns all data for processes managed by forever.
9393
//
9494
function getAllProcesses(callback) {
95-
var sockPath = forever.config.get('sockPath');
95+
const sockPath = forever.config.get("sockPath");
9696

9797
function getProcess(name, next) {
98-
var fullPath = path.join(sockPath, name),
99-
socket = new nssocket.NsSocket();
98+
let fullPath = path.join(sockPath, name);
99+
const socket = new nssocket.NsSocket();
100100

101101
if (process.platform === 'win32') {
102102
// it needs the prefix
@@ -164,10 +164,10 @@ function getAllPids(processes) {
164164
// Returns emitter that you can use to handle events on failure or success (i.e 'error' or <event>)
165165
//
166166
function stopOrRestart(action, event, format, target) {
167-
var emitter = new events.EventEmitter();
167+
const emitter = new events.EventEmitter();
168168

169169
function sendAction(proc, next) {
170-
var socket = new nssocket.NsSocket();
170+
const socket = new nssocket.NsSocket();
171171

172172
function onMessage(data) {
173173
//
@@ -181,8 +181,8 @@ function stopOrRestart(action, event, format, target) {
181181
// Messages are only sent back from error cases. The event
182182
// calling context is available from `nssocket`.
183183
//
184-
var message = data && data.message,
185-
type = this.event.slice().pop();
184+
const message = data && data.message,
185+
type = this.event.slice().pop();
186186

187187
//
188188
// Remark (Tjatse): This message comes from `forever-monitor`, the process is marked
@@ -223,7 +223,7 @@ function stopOrRestart(action, event, format, target) {
223223
});
224224
}
225225

226-
var procs;
226+
let procs;
227227
if (target !== undefined && target !== null) {
228228
if (isNaN(target)) {
229229
procs = forever.findByScript(target, processes);
@@ -355,7 +355,7 @@ forever.load = function (options) {
355355
// Sets up debugging for this forever process
356356
//
357357
forever._debug = function () {
358-
var debug = forever.config.get('debug');
358+
const debug = forever.config.get("debug");
359359

360360
if (!debug) {
361361
forever.config.set('debug', true);
@@ -381,7 +381,7 @@ forever.load();
381381
// the target script does exist before executing callback.
382382
//
383383
forever.stat = function (logFile, script, callback) {
384-
var logAppend;
384+
let logAppend;
385385

386386
if (arguments.length === 4) {
387387
logAppend = callback;
@@ -419,7 +419,7 @@ forever.start = function (script, options) {
419419
//
420420
// Create the monitor, log events, and start.
421421
//
422-
var monitor = new forever.Monitor(script, options);
422+
const monitor = new forever.Monitor(script, options);
423423
forever.logEvents(monitor);
424424
return monitor.start();
425425
};
@@ -436,19 +436,17 @@ forever.startDaemon = function (script, options) {
436436
options.logFile = forever.logFilePath(options.logFile || forever.config.get('logFile') || options.uid + '.log');
437437
options.pidFile = forever.pidFilePath(options.pidFile || forever.config.get('pidFile') || options.uid + '.pid');
438438

439-
var monitor, outFD, errFD, monitorPath;
440-
441439
//
442440
// This log file is forever's log file - the user's outFile and errFile
443441
// options are not taken into account here. This will be an aggregate of all
444442
// the app's output, as well as messages from the monitor process, where
445443
// applicable.
446444
//
447-
outFD = fs.openSync(options.logFile, 'a');
448-
errFD = fs.openSync(options.logFile, 'a');
449-
monitorPath = path.resolve(__dirname, '..', 'bin', 'monitor');
445+
const outFD = fs.openSync(options.logFile, 'a');
446+
const errFD = fs.openSync(options.logFile, 'a');
447+
const monitorPath = path.resolve(__dirname, '..', 'bin', 'monitor');
450448

451-
monitor = spawn(process.execPath, [monitorPath, script], {
449+
const monitor = spawn(process.execPath, [monitorPath, script], {
452450
stdio: ['ipc', outFD, errFD],
453451
detached: true
454452
});
@@ -481,9 +479,9 @@ forever.startDaemon = function (script, options) {
481479
// **NOTE:** This will change your `process.title`.
482480
//
483481
forever.startServer = function () {
484-
var args = Array.prototype.slice.call(arguments),
485-
monitors = [],
486-
callback;
482+
const args = Array.prototype.slice.call(arguments);
483+
let monitors = [],
484+
callback;
487485

488486
args.forEach(function (a) {
489487
if (Array.isArray(a)) {
@@ -500,9 +498,9 @@ forever.startServer = function () {
500498
});
501499

502500
async.map(monitors, function (monitor, next) {
503-
var worker = new forever.Worker({
501+
const worker = new forever.Worker({
504502
monitor: monitor,
505-
sockPath: forever.config.get('sockPath'),
503+
sockPath: forever.config.get("sockPath"),
506504
exitOnStop: true
507505
});
508506

@@ -592,47 +590,48 @@ forever.tail = function (target, options, callback) {
592590
options.stream = false;
593591
}
594592

595-
var that = this,
596-
length = options.length || forever.config.get('loglength'),
597-
stream = options.stream || forever.config.get('logstream'),
598-
blanks = function (e, i, a) { return e !== ''; },
599-
title = function (e, i, a) { return e.match(/^==>/); },
600-
args = ['-n', length],
601-
logs;
593+
const that = this,
594+
length = options.length || forever.config.get("loglength"),
595+
stream = options.stream || forever.config.get("logstream"),
596+
blanks = function(e, i, a) {
597+
return e !== "";
598+
},
599+
title = function(e, i, a) {
600+
return e.match(/^==>/);
601+
},
602+
args = ["-n", length];
603+
let logs;
602604

603605
if (stream) { args.unshift('-f'); }
604606

605607
function tailProcess(procs, next) {
606-
var count = 0,
607-
map = {},
608-
tail;
608+
let count = 0;
609+
const map = {};
609610

610611
procs.forEach(function (proc) {
611612
args.push(proc.logFile);
612613
map[proc.logFile] = { pid: proc.pid, file: proc.file };
613614
count++;
614615
});
615616

616-
tail = spawn('tail', args, {
617+
const tail = spawn('tail', args, {
617618
stdio: [null, 'pipe', 'pipe'],
618619
});
619620

620621
tail.stdio[1].setEncoding('utf8');
621622
tail.stdio[2].setEncoding('utf8');
622623

623624
tail.stdio[1].on('data', function (data) {
624-
var chunk = data.split('\n\n');
625+
const chunk = data.split("\n\n");
625626
chunk.forEach(function (logs) {
626-
var filteredLogs = logs.split('\n').filter(blanks),
627-
file = filteredLogs.filter(title),
628-
lines,
629-
proc;
627+
const filteredLogs = logs.split("\n").filter(blanks),
628+
file = filteredLogs.filter(title);
630629

631-
proc = file.length
630+
const proc = file.length
632631
? map[file[0].split(' ')[1]]
633632
: map[procs[0].logFile];
634633

635-
lines = count !== 1
634+
const lines = count !== 1
636635
? filteredLogs.slice(1)
637636
: filteredLogs;
638637

@@ -655,7 +654,7 @@ forever.tail = function (target, options, callback) {
655654
return callback(new Error('Cannot find forever process: ' + target));
656655
}
657656

658-
var procs = forever.findByIndex(target, processes)
657+
const procs = forever.findByIndex(target, processes)
659658
|| forever.findByScript(target, processes);
660659

661660
if (!procs) {
@@ -675,7 +674,7 @@ forever.tail = function (target, options, callback) {
675674
forever.findById = function (id, processes) {
676675
if (!processes) { return null; }
677676

678-
var procs = processes.filter(function (p) {
677+
let procs = processes.filter(function(p) {
679678
return p.id === id;
680679
});
681680

@@ -690,8 +689,8 @@ forever.findById = function (id, processes) {
690689
// Finds the process with the specified index.
691690
//
692691
forever.findByIndex = function (index, processes) {
693-
var indexAsNum = parseInt(index, 10),
694-
proc;
692+
const indexAsNum = parseInt(index, 10);
693+
let proc;
695694

696695
if (indexAsNum == index) {
697696
proc = processes && processes[indexAsNum];
@@ -713,7 +712,7 @@ forever.findByScript = function (script, processes) {
713712
script = path.resolve(process.cwd(), script);
714713
}
715714

716-
var procs = processes.filter(function (p) {
715+
let procs = processes.filter(function(p) {
717716
return p.file === script || path.join(p.spawnWith.cwd, p.file) === script;
718717
});
719718

@@ -728,9 +727,9 @@ forever.findByScript = function (script, processes) {
728727
// Finds the process with the specified uid.
729728
//
730729
forever.findByUid = function (script, processes) {
731-
var procs = !processes
730+
let procs = !processes
732731
? null
733-
: processes.filter(function (p) {
732+
: processes.filter(function(p) {
734733
return p.uid === script;
735734
});
736735

@@ -749,7 +748,7 @@ forever.findByPid = function (pid, processes) {
749748
? parseInt(pid, 10)
750749
: pid;
751750

752-
var procs = processes && processes.filter(function (p) {
751+
let procs = processes && processes.filter(function(p) {
753752
return p.pid === pid;
754753
});
755754

@@ -769,10 +768,10 @@ forever.format = function (format, procs) {
769768
return null;
770769
}
771770

772-
var index = 0,
773-
columns = forever.config.get('columns'),
774-
rows = [[' '].concat(columns)],
775-
formatted;
771+
let index = 0;
772+
const columns = forever.config.get("columns"),
773+
rows = [[" "].concat(columns)];
774+
let formatted;
776775

777776
function mapColumns(prefix, mapFn) {
778777
return [prefix].concat(columns.map(mapFn));
@@ -809,8 +808,8 @@ forever.format = function (format, procs) {
809808
// config, and log files used by forever.
810809
//
811810
forever.cleanUp = function (cleanLogs, allowManager) {
812-
var emitter = new events.EventEmitter(),
813-
pidPath = forever.config.get('pidPath');
811+
const emitter = new events.EventEmitter(),
812+
pidPath = forever.config.get("pidPath");
814813

815814
getAllProcesses(function (err, processes) {
816815
if (err) {
@@ -899,16 +898,14 @@ forever.cleanUp = function (cleanLogs, allowManager) {
899898
// that do not belong to current running forever processes.
900899
//
901900
forever.cleanLogsSync = function (processes) {
902-
var root = forever.config.get('root'),
903-
files = fs.readdirSync(root),
904-
running,
905-
runningLogs;
901+
const root = forever.config.get("root"),
902+
files = fs.readdirSync(root);
906903

907-
running = processes && processes.filter(function (p) {
904+
const running = processes && processes.filter(function (p) {
908905
return p && p.logFile;
909906
});
910907

911-
runningLogs = running && running.map(function (p) {
908+
const runningLogs = running && running.map(function (p) {
912909
return p.logFile.split('/').pop();
913910
});
914911

@@ -1028,14 +1025,14 @@ forever.columns = {
10281025
return "STOPPED".red;
10291026
}
10301027

1031-
var delta = (new Date().getTime() - proc.ctime) / 1000;
1032-
var days = Math.floor(delta / 86400);
1028+
let delta = (new Date().getTime() - proc.ctime) / 1000;
1029+
const days = Math.floor(delta / 86400);
10331030
delta -= days * 86400;
1034-
var hours = Math.floor(delta / 3600) % 24;
1031+
const hours = Math.floor(delta / 3600) % 24;
10351032
delta -= hours * 3600;
1036-
var minutes = Math.floor(delta / 60) % 60;
1033+
const minutes = Math.floor(delta / 60) % 60;
10371034
delta -= minutes * 60;
1038-
var seconds = delta % 60;
1035+
const seconds = delta % 60;
10391036

10401037
return (days+':'+hours+':'+minutes+':'+seconds).yellow;
10411038
}

0 commit comments

Comments
 (0)