mirror of
https://github.com/nodejs/node.git
synced 2025-05-21 21:51:52 +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 credentials = internalBinding('credentials');
|
||||||
const rawMethods = internalBinding('process_methods');
|
const rawMethods = internalBinding('process_methods');
|
||||||
|
const {
|
||||||
|
namespace: {
|
||||||
|
addSerializeCallback,
|
||||||
|
isBuildingSnapshot,
|
||||||
|
},
|
||||||
|
} = require('internal/v8/startup_snapshot');
|
||||||
|
|
||||||
process.abort = rawMethods.abort;
|
process.abort = rawMethods.abort;
|
||||||
process.umask = wrappedUmask;
|
process.umask = wrappedUmask;
|
||||||
@ -107,6 +113,12 @@ function wrapPosixCredentialSetters(credentials) {
|
|||||||
// directory is changed by `chdir`, it'll be updated.
|
// directory is changed by `chdir`, it'll be updated.
|
||||||
let cachedCwd = '';
|
let cachedCwd = '';
|
||||||
|
|
||||||
|
if (isBuildingSnapshot()) {
|
||||||
|
addSerializeCallback(() => {
|
||||||
|
cachedCwd = '';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function wrappedChdir(directory) {
|
function wrappedChdir(directory) {
|
||||||
validateString(directory, 'directory');
|
validateString(directory, 'directory');
|
||||||
rawMethods.chdir(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