Skip to content

Commit 1e17319

Browse files
author
Benjamin Pasero
committed
1 parent 739a9dd commit 1e17319

6 files changed

Lines changed: 61 additions & 45 deletions

File tree

src/vs/code/electron-main/main.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import { app, dialog } from 'electron';
88
import { assign } from 'vs/base/common/objects';
99
import * as platform from 'vs/base/common/platform';
1010
import product from 'vs/platform/product/node/product';
11-
import { parseMainProcessArgv } from 'vs/platform/environment/node/argvHelper';
11+
import { parseMainProcessArgv, createWaitMarkerFile } from 'vs/platform/environment/node/argvHelper';
12+
import { addArg } from 'vs/platform/environment/node/argv';
1213
import { mkdirp } from 'vs/base/node/pfs';
1314
import { validatePaths } from 'vs/code/node/paths';
1415
import { LifecycleService, ILifecycleService } from 'vs/platform/lifecycle/electron-main/lifecycleMain';
@@ -36,7 +37,6 @@ import { IDiagnosticsService, DiagnosticsService } from 'vs/platform/diagnostics
3637
import { BufferLogService } from 'vs/platform/log/common/bufferLog';
3738
import { uploadLogs } from 'vs/code/electron-main/logUploader';
3839
import { setUnexpectedErrorHandler } from 'vs/base/common/errors';
39-
import { createWaitMarkerFile } from 'vs/code/node/wait';
4040

4141
class ExpectedError extends Error {
4242
readonly isExpected = true;
@@ -359,7 +359,7 @@ function main(): void {
359359
if (args.wait && !args.waitMarkerFilePath) {
360360
createWaitMarkerFile(args.verbose).then(waitMarkerFilePath => {
361361
if (waitMarkerFilePath) {
362-
process.argv.push('--waitMarkerFilePath', waitMarkerFilePath);
362+
addArg(process.argv, '--waitMarkerFilePath', waitMarkerFilePath);
363363
args.waitMarkerFilePath = waitMarkerFilePath;
364364
}
365365

src/vs/code/node/cli.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
import { spawn, ChildProcess } from 'child_process';
77
import { assign } from 'vs/base/common/objects';
8-
import { buildHelpMessage, buildVersionMessage } from 'vs/platform/environment/node/argv';
8+
import { buildHelpMessage, buildVersionMessage, addArg } from 'vs/platform/environment/node/argv';
9+
import { parseCLIProcessArgv, createWaitMarkerFile } from 'vs/platform/environment/node/argvHelper';
910
import { ParsedArgs } from 'vs/platform/environment/common/environment';
1011
import product from 'vs/platform/product/node/product';
1112
import pkg from 'vs/platform/product/node/package';
@@ -19,8 +20,6 @@ import * as iconv from 'iconv-lite';
1920
import { writeFileAndFlushSync } from 'vs/base/node/extfs';
2021
import { isWindows } from 'vs/base/common/platform';
2122
import { ProfilingSession, Target } from 'v8-inspect-profiler';
22-
import { createWaitMarkerFile } from 'vs/code/node/wait';
23-
import { parseCLIProcessArgv } from 'vs/platform/environment/node/argvHelper';
2423

2524
function shouldSpawnCliProcess(argv: ParsedArgs): boolean {
2625
return !!argv['install-source']
@@ -180,11 +179,11 @@ export async function main(argv: string[]): Promise<any> {
180179
});
181180

182181
// Make sure to open tmp file
183-
argv.push(stdinFilePath);
182+
addArg(argv, stdinFilePath);
184183

185184
// Enable --wait to get all data and ignore adding this to history
186-
argv.push('--wait');
187-
argv.push('--skip-add-to-recently-opened');
185+
addArg(argv, '--wait');
186+
addArg(argv, '--skip-add-to-recently-opened');
188187
args.wait = true;
189188
}
190189

@@ -232,7 +231,7 @@ export async function main(argv: string[]): Promise<any> {
232231
if (args.wait) {
233232
waitMarkerFilePath = await createWaitMarkerFile(verbose);
234233
if (waitMarkerFilePath) {
235-
argv.push('--waitMarkerFilePath', waitMarkerFilePath);
234+
addArg(argv, '--waitMarkerFilePath', waitMarkerFilePath);
236235
}
237236
}
238237

@@ -252,11 +251,11 @@ export async function main(argv: string[]): Promise<any> {
252251

253252
const filenamePrefix = paths.join(os.homedir(), 'prof-' + Math.random().toString(16).slice(-4));
254253

255-
argv.push(`--inspect-brk=${portMain}`);
256-
argv.push(`--remote-debugging-port=${portRenderer}`);
257-
argv.push(`--inspect-brk-extensions=${portExthost}`);
258-
argv.push(`--prof-startup-prefix`, filenamePrefix);
259-
argv.push(`--no-cached-data`);
254+
addArg(argv, `--inspect-brk=${portMain}`);
255+
addArg(argv, `--remote-debugging-port=${portRenderer}`);
256+
addArg(argv, `--inspect-brk-extensions=${portExthost}`);
257+
addArg(argv, `--prof-startup-prefix`, filenamePrefix);
258+
addArg(argv, `--no-cached-data`);
260259

261260
fs.writeFileSync(filenamePrefix, argv.slice(-6).join('|'));
262261

@@ -341,7 +340,7 @@ export async function main(argv: string[]): Promise<any> {
341340
if (args['js-flags']) {
342341
const match = /max_old_space_size=(\d+)/g.exec(args['js-flags']);
343342
if (match && !args['max-memory']) {
344-
argv.push(`--max-memory=${match[1]}`);
343+
addArg(argv, `--max-memory=${match[1]}`);
345344
}
346345
}
347346

src/vs/code/node/wait.ts

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/vs/code/test/node/argv.test.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55
import * as assert from 'assert';
6-
import { formatOptions, Option } from 'vs/platform/environment/node/argv';
6+
import { formatOptions, Option, addArg } from 'vs/platform/environment/node/argv';
77

88
suite('formatOptions', () => {
99

@@ -54,4 +54,13 @@ suite('formatOptions', () => {
5454
' bar bar bar bar bar bar bar bar bar '
5555
]);
5656
});
57+
58+
test('addArg', () => {
59+
assert.deepEqual(addArg([], 'foo'), ['foo']);
60+
assert.deepEqual(addArg([], 'foo', 'bar'), ['foo', 'bar']);
61+
assert.deepEqual(addArg(['foo'], 'bar'), ['foo', 'bar']);
62+
assert.deepEqual(addArg(['--wait'], 'bar'), ['--wait', 'bar']);
63+
assert.deepEqual(addArg(['--wait', '--', '--foo'], 'bar'), ['--wait', 'bar', '--', '--foo']);
64+
assert.deepEqual(addArg(['--', '--foo'], 'bar'), ['bar', '--', '--foo']);
65+
});
5766
});

src/vs/platform/environment/node/argv.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,3 +239,17 @@ export function hasArgs(arg: string | string[] | undefined): boolean {
239239
}
240240
return false;
241241
}
242+
243+
export function addArg(argv: string[], ...args: string[]): string[] {
244+
const endOfArgsMarkerIndex = argv.indexOf('--');
245+
if (endOfArgsMarkerIndex === -1) {
246+
argv.push(...args);
247+
} else {
248+
// if the we have an argument "--" (end of argument marker)
249+
// we cannot add arguments at the end. rather, we add
250+
// arguments before the "--" marker.
251+
argv.splice(endOfArgsMarkerIndex, 0, ...args);
252+
}
253+
254+
return argv;
255+
}

src/vs/platform/environment/node/argvHelper.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as assert from 'assert';
7+
import { tmpdir } from 'os';
78
import { firstIndex } from 'vs/base/common/arrays';
89
import { localize } from 'vs/nls';
910
import { ParsedArgs } from '../common/environment';
1011
import { MIN_MAX_MEMORY_SIZE_MB } from 'vs/platform/files/common/files';
1112
import { parseArgs } from 'vs/platform/environment/node/argv';
12-
13+
import { join } from 'vs/base/common/path';
14+
import { writeFile } from 'vs/base/node/pfs';
1315

1416
function validate(args: ParsedArgs): ParsedArgs {
1517
if (args.goto) {
@@ -57,4 +59,22 @@ export function parseCLIProcessArgv(processArgv: string[]): ParsedArgs {
5759
}
5860

5961
return validate(parseArgs(args));
60-
}
62+
}
63+
64+
export function createWaitMarkerFile(verbose?: boolean): Promise<string> {
65+
const randomWaitMarkerPath = join(tmpdir(), Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 10));
66+
67+
return writeFile(randomWaitMarkerPath, '').then(() => {
68+
if (verbose) {
69+
console.log(`Marker file for --wait created: ${randomWaitMarkerPath}`);
70+
}
71+
72+
return randomWaitMarkerPath;
73+
}, error => {
74+
if (verbose) {
75+
console.error(`Failed to create marker file for --wait: ${error}`);
76+
}
77+
78+
return Promise.resolve(undefined);
79+
});
80+
}

0 commit comments

Comments
 (0)