Skip to content
Permalink
Browse files

repl: fix /dev/null history file regression

This fixes a regression from 83887f3 where ftruncate() fails on
a file symlinked to /dev/null.

PR-URL: #12762
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information...
mscdex committed Apr 30, 2017
1 parent dc3bbb4 commit c20e87a10e6d5cd88b4532d58a2bcf68bcd8745d
Showing with 20 additions and 16 deletions.
  1. +9 −16 lib/internal/repl.js
  2. +11 −0 test/parallel/test-repl-persistent-history.js
@@ -172,25 +172,18 @@ function setupHistory(repl, historyPath, oldHistoryPath, ready) {
return ready(err);
}
fs.ftruncate(hnd, 0, (err) => {
return onftruncate(err, hnd);
repl._historyHandle = hnd;
repl.on('line', online);

// reading the file data out erases it
repl.once('flushHistory', function() {
repl.resume();
ready(null, repl);
});
flushHistory();
});
}

function onftruncate(err, hnd) {
if (err) {
return ready(err);
}
repl._historyHandle = hnd;
repl.on('line', online);

// reading the file data out erases it
repl.once('flushHistory', function() {
repl.resume();
ready(null, repl);
});
flushHistory();
}

// ------ history listeners ------
function online() {
repl._flushing = true;
@@ -78,6 +78,8 @@ const emptyHistoryPath = path.join(fixtures, '.empty-repl-history-file');
const defaultHistoryPath = path.join(common.tmpDir, '.node_repl_history');
const emptyHiddenHistoryPath = path.join(fixtures,
'.empty-hidden-repl-history-file');
const devNullHistoryPath = path.join(common.tmpDir,
'.dev-null-repl-history-file');

const tests = [
{
@@ -178,6 +180,15 @@ const tests = [
test: [UP],
expected: [prompt]
},
{
before: function before() {
if (!common.isWindows)
fs.symlinkSync('/dev/null', devNullHistoryPath);
},
env: { NODE_REPL_HISTORY: devNullHistoryPath },
test: [UP],
expected: [prompt]
},
{ // Make sure this is always the last test, since we change os.homedir()
before: function before() {
// Mock os.homedir() failure

0 comments on commit c20e87a

Please sign in to comment.
You can’t perform that action at this time.