* Move VS Code test isolates to user cache * Validate VS Code test root override * Validate platform cache environment paths * Require fully qualified Windows cache paths
52 lines
2.3 KiB
TypeScript
52 lines
2.3 KiB
TypeScript
/* --------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All Rights Reserved.
|
|
* See 'LICENSE' in the project root for license information.
|
|
* ------------------------------------------------------------------------------------------ */
|
|
|
|
import { createHash } from 'crypto';
|
|
import { homedir } from 'os';
|
|
import { posix, win32 } from 'path';
|
|
|
|
function isFullyQualifiedPath(value: string, platform: NodeJS.Platform): boolean {
|
|
const path = platform === 'win32' ? win32 : posix;
|
|
return path.isAbsolute(value) && (platform !== 'win32' || path.parse(value).root.length > 1);
|
|
}
|
|
|
|
export function getVSCodeTestIsolate(
|
|
scriptDirectory: string,
|
|
platform: NodeJS.Platform = process.platform,
|
|
environment: NodeJS.ProcessEnv = process.env,
|
|
homeDirectory: string = homedir()): string {
|
|
const path = platform === 'win32' ? win32 : posix;
|
|
const override = environment.CPPTOOLS_VSCODE_TEST_ROOT;
|
|
let root: string;
|
|
|
|
if (override) {
|
|
if (!isFullyQualifiedPath(override, platform)) {
|
|
throw new Error('CPPTOOLS_VSCODE_TEST_ROOT must be a fully qualified absolute path.');
|
|
}
|
|
root = override;
|
|
} else {
|
|
switch (platform) {
|
|
case 'win32': {
|
|
const localAppData = environment.LOCALAPPDATA;
|
|
const cacheDirectory = localAppData && isFullyQualifiedPath(localAppData, platform) ? localAppData : path.resolve(homeDirectory, 'AppData', 'Local');
|
|
root = path.resolve(cacheDirectory, 'Microsoft', 'vscode-cpptools', 'vscode-test');
|
|
break;
|
|
}
|
|
case 'darwin':
|
|
root = path.resolve(homeDirectory, 'Library', 'Caches', 'vscode-cpptools', 'vscode-test');
|
|
break;
|
|
default: {
|
|
const xdgCacheHome = environment.XDG_CACHE_HOME;
|
|
const cacheDirectory = xdgCacheHome && isFullyQualifiedPath(xdgCacheHome, platform) ? xdgCacheHome : path.resolve(homeDirectory, '.cache');
|
|
root = path.resolve(cacheDirectory, 'vscode-cpptools', 'vscode-test');
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
const worktreeHash = createHash('sha256').update(scriptDirectory).digest('hex').substring(0, 6);
|
|
return path.resolve(root, worktreeHash);
|
|
}
|