提交 1336b3d3 编写于 作者: J Joao Moreno

wrap user env in a mark

fixes #8434
上级 bd8a5ad2
......@@ -7,11 +7,6 @@
"from": "agent-base@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-1.0.2.tgz"
},
"ansi-regex": {
"version": "2.0.0",
"from": "ansi-regex@latest",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
},
"anymatch": {
"version": "1.3.0",
"from": "anymatch@>=1.1.0 <2.0.0",
......
......@@ -14,7 +14,6 @@
"watch": "gulp watch"
},
"dependencies": {
"ansi-regex": "^2.0.0",
"applicationinsights": "0.15.6",
"chokidar": "1.0.5",
"emmet": "1.3.1",
......
......@@ -31,7 +31,7 @@ import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { ILogService, MainLogService } from 'vs/code/electron-main/log';
import { IStorageService, StorageService } from 'vs/code/electron-main/storage';
import * as cp from 'child_process';
import * as ansiregex from 'ansi-regex';
import { generateUuid } from 'vs/base/common/uuid';
function quit(accessor: ServicesAccessor, error?: Error);
function quit(accessor: ServicesAccessor, message?: string);
......@@ -287,13 +287,15 @@ function getUnixUserEnvironment(): TPromise<IEnv> {
const promise = new TPromise((c, e) => {
const runAsNode = process.env['ATOM_SHELL_INTERNAL_RUN_AS_NODE'];
const noAttach = process.env['ELECTRON_NO_ATTACH_CONSOLE'];
const mark = generateUuid().replace(/-/g, '').substr(0, 12);
const regex = new RegExp(mark + '(.*)' + mark);
const env = assign({}, process.env, {
ATOM_SHELL_INTERNAL_RUN_AS_NODE: '1',
ELECTRON_NO_ATTACH_CONSOLE: '1'
});
const command = `'${process.execPath}' -p 'JSON.stringify(process.env)'`;
const command = `'${process.execPath}' -p '"${ mark }" + JSON.stringify(process.env) + "${ mark }"'`;
const child = cp.spawn(process.env.SHELL, ['-ilc', command], {
detached: true,
stdio: ['ignore', 'pipe', process.stderr],
......@@ -309,16 +311,12 @@ function getUnixUserEnvironment(): TPromise<IEnv> {
return e(new Error('Failed to get environment'));
}
const raw = Buffer
.concat(buffers)
.toString('utf8')
// remove regular ANSI escape sequences
.replace(ansiregex(), '')
// remove OSC ANSI escape sequences
.replace(/\u001b\].*?(\u0007|\u001b\\)/g, '');
const raw = Buffer.concat(buffers).toString('utf8');
const match = regex.exec(raw);
const rawStripped = match ? match[1] : '{}';
try {
const env = JSON.parse(raw);
const env = JSON.parse(rawStripped);
if (runAsNode) {
env['ATOM_SHELL_INTERNAL_RUN_AS_NODE'] = runAsNode;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册