mirror of
https://github.com/nodejs/node.git
synced 2025-05-21 15:40:39 +00:00
lib: reset the cwd cache before execution
PR-URL: https://github.com/nodejs/node/pull/49684 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
parent
fa741580ab
commit
b7d836e2c7
@ -2,6 +2,12 @@
|
||||
|
||||
const credentials = internalBinding('credentials');
|
||||
const rawMethods = internalBinding('process_methods');
|
||||
const {
|
||||
namespace: {
|
||||
addSerializeCallback,
|
||||
isBuildingSnapshot,
|
||||
},
|
||||
} = require('internal/v8/startup_snapshot');
|
||||
|
||||
process.abort = rawMethods.abort;
|
||||
process.umask = wrappedUmask;
|
||||
@ -107,6 +113,12 @@ function wrapPosixCredentialSetters(credentials) {
|
||||
// directory is changed by `chdir`, it'll be updated.
|
||||
let cachedCwd = '';
|
||||
|
||||
if (isBuildingSnapshot()) {
|
||||
addSerializeCallback(() => {
|
||||
cachedCwd = '';
|
||||
});
|
||||
}
|
||||
|
||||
function wrappedChdir(directory) {
|
||||
validateString(directory, 'directory');
|
||||
rawMethods.chdir(directory);
|
||||
|
10
test/fixtures/snapshot/cwd.js
vendored
Normal file
10
test/fixtures/snapshot/cwd.js
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
const {
|
||||
setDeserializeMainFunction,
|
||||
} = require('v8').startupSnapshot;
|
||||
|
||||
// To make sure the cwd is present in the cache
|
||||
process.cwd();
|
||||
|
||||
setDeserializeMainFunction(() => {
|
||||
console.log(process.cwd());
|
||||
});
|
47
test/parallel/test-snapshot-cwd.js
Normal file
47
test/parallel/test-snapshot-cwd.js
Normal file
@ -0,0 +1,47 @@
|
||||
'use strict';
|
||||
|
||||
// This tests that process.cwd() is accurate when
|
||||
// restoring state from a snapshot
|
||||
|
||||
require('../common');
|
||||
const { spawnSyncAndExitWithoutError } = require('../common/child_process');
|
||||
const tmpdir = require('../common/tmpdir');
|
||||
const fixtures = require('../common/fixtures');
|
||||
const fs = require('fs');
|
||||
|
||||
tmpdir.refresh();
|
||||
const blobPath = tmpdir.resolve('snapshot.blob');
|
||||
const file = fixtures.path('snapshot', 'cwd.js');
|
||||
|
||||
const subdir = tmpdir.resolve('foo');
|
||||
fs.mkdirSync(subdir);
|
||||
|
||||
{
|
||||
// Create the snapshot.
|
||||
spawnSyncAndExitWithoutError(process.execPath, [
|
||||
'--snapshot-blob',
|
||||
blobPath,
|
||||
'--build-snapshot',
|
||||
file,
|
||||
], {
|
||||
cwd: tmpdir.path,
|
||||
encoding: 'utf8'
|
||||
}, {
|
||||
status: 0,
|
||||
});
|
||||
}
|
||||
|
||||
{
|
||||
spawnSyncAndExitWithoutError(process.execPath, [
|
||||
'--snapshot-blob',
|
||||
blobPath,
|
||||
file,
|
||||
], {
|
||||
cwd: subdir,
|
||||
encoding: 'utf8'
|
||||
}, {
|
||||
status: 0,
|
||||
trim: true,
|
||||
stdout: subdir,
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue
Block a user