if (data) {
repl.history = data.split(/[\n\r]+/, repl.historySize);
- } else if (oldHistoryPath) {
+ } else if (oldHistoryPath === historyPath) {
+ // If pre-v3.0, the user had set NODE_REPL_HISTORY_FILE to
+ // ~/.node_repl_history, warn the user about it and proceed.
+ repl._writeToOutput(
+ '\nThe old repl history file has the same name and location as ' +
+ `the new one i.e., ${historyPath} and is empty.\nUsing it as is.\n`);
+ repl._refreshLine();
+
+ } else if (oldHistoryPath) {
// Grab data from the older pre-v3.0 JSON NODE_REPL_HISTORY_FILE format.
repl._writeToOutput(
'\nConverting old JSON repl history to line-separated history.\n' +
repl._refreshLine();
try {
- repl.history = JSON.parse(fs.readFileSync(oldHistoryPath, 'utf8'));
+ // Pre-v3.0, repl history was stored as JSON.
+ // Try and convert it to line separated history.
+ const oldReplJSONHistory = fs.readFileSync(oldHistoryPath, 'utf8');
+
+ // Only attempt to use the history if there was any.
+ if (oldReplJSONHistory) repl.history = JSON.parse(oldReplJSONHistory);
+
if (!Array.isArray(repl.history)) {
throw new Error('Expected array, got ' + typeof repl.history);
}
'REPL session history will not be persisted.\n';
const replFailedRead = '\nError: Could not open history file.\n' +
'REPL session history will not be persisted.\n';
+const sameHistoryFilePaths = '\nThe old repl history file has the same name ' +
+ 'and location as the new one i.e., ' +
+ path.join(common.tmpDir, '.node_repl_history') +
+ ' and is empty.\nUsing it as is.\n';
// File paths
const fixtures = path.join(common.testDir, 'fixtures');
const historyFixturePath = path.join(fixtures, '.node_repl_history');
const historyPathFail = path.join(common.tmpDir, '.node_repl\u0000_history');
const oldHistoryPath = path.join(fixtures, 'old-repl-history-file.json');
const enoentHistoryPath = path.join(fixtures, 'enoent-repl-history-file.json');
+const emptyHistoryPath = path.join(fixtures, '.empty-repl-history-file');
const defaultHistoryPath = path.join(common.tmpDir, '.node_repl_history');
-
const tests = [{
env: { NODE_REPL_HISTORY: '' },
test: [UP],
expected: [prompt, replDisabled, prompt]
},
{
+ env: { NODE_REPL_HISTORY_FILE: emptyHistoryPath },
+ test: [UP],
+ expected: [prompt, convertMsg, prompt]
+},
+{
+ env: { NODE_REPL_HISTORY_FILE: defaultHistoryPath },
+ test: [UP],
+ expected: [prompt, sameHistoryFilePaths, prompt]
+},
+{
env: { NODE_REPL_HISTORY: historyPath },
test: [UP, CLEAR],
expected: [prompt, prompt + '\'you look fabulous today\'', prompt]