Skip to content

Commit

Permalink
repl: fix /dev/null history file regression
Browse files Browse the repository at this point in the history
This fixes a regression from 83887f3 where ftruncate() fails on
a file symlinked to /dev/null.

PR-URL: nodejs#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 authored and Olivier Martin committed May 6, 2017
1 parent 8bd025c commit bb9663a
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 16 deletions.
25 changes: 9 additions & 16 deletions lib/internal/repl.js
Expand Up @@ -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;
Expand Down
11 changes: 11 additions & 0 deletions test/parallel/test-repl-persistent-history.js
Expand Up @@ -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 = [
{
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit bb9663a

Please sign in to comment.