mirror of
https://github.com/nodejs/node.git
synced 2025-08-16 06:08:50 +02:00
repl: support hidden history file on Windows
On Windows when REPL history file has the hidden attribute node will fail when trying to open it in 'w' mode. This changes the mode to 'r+'. The file is guaranteed to exists because of earlier open call with 'a+'.
This commit is contained in:
parent
45c4ad58e5
commit
83887f35fa
3 changed files with 25 additions and 1 deletions
|
@ -164,10 +164,19 @@ function setupHistory(repl, historyPath, oldHistoryPath, ready) {
|
|||
}
|
||||
}
|
||||
|
||||
fs.open(historyPath, 'w', onhandle);
|
||||
fs.open(historyPath, 'r+', onhandle);
|
||||
}
|
||||
|
||||
function onhandle(err, hnd) {
|
||||
if (err) {
|
||||
return ready(err);
|
||||
}
|
||||
fs.ftruncate(hnd, 0, (err) => {
|
||||
return onftruncate(err, hnd);
|
||||
});
|
||||
}
|
||||
|
||||
function onftruncate(err, hnd) {
|
||||
if (err) {
|
||||
return ready(err);
|
||||
}
|
||||
|
|
0
test/fixtures/.empty-hidden-repl-history-file
vendored
Normal file
0
test/fixtures/.empty-hidden-repl-history-file
vendored
Normal file
|
@ -76,6 +76,8 @@ 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 emptyHiddenHistoryPath = path.join(fixtures,
|
||||
'.empty-hidden-repl-history-file');
|
||||
|
||||
const tests = [
|
||||
{
|
||||
|
@ -163,6 +165,19 @@ const tests = [
|
|||
test: [UP],
|
||||
expected: [prompt, replFailedRead, prompt, replDisabled, prompt]
|
||||
},
|
||||
{
|
||||
before: function before() {
|
||||
if (common.isWindows) {
|
||||
const execSync = require('child_process').execSync;
|
||||
execSync(`ATTRIB +H "${emptyHiddenHistoryPath}"`, (err) => {
|
||||
assert.ifError(err);
|
||||
});
|
||||
}
|
||||
},
|
||||
env: { NODE_REPL_HISTORY: emptyHiddenHistoryPath },
|
||||
test: [UP],
|
||||
expected: [prompt]
|
||||
},
|
||||
{ // Make sure this is always the last test, since we change os.homedir()
|
||||
before: function before() {
|
||||
// Mock os.homedir() failure
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue