diff --git a/src/vs/platform/environment/node/environmentService.ts b/src/vs/platform/environment/node/environmentService.ts index f8f7bce47c82a..0d154c16f329a 100644 --- a/src/vs/platform/environment/node/environmentService.ts +++ b/src/vs/platform/environment/node/environmentService.ts @@ -36,7 +36,7 @@ export interface INativeEnvironmentService extends IEnvironmentService { installSourcePath: string; extensionsPath?: string; - extensionsDownloadPath?: string; + extensionsDownloadPath: string; builtinExtensionsPath: string; globalStorageHome: string; @@ -151,8 +151,13 @@ export class EnvironmentService implements INativeEnvironmentService { } } - get extensionsDownloadPath(): string | undefined { - return parsePathArg(this._args['extensions-download-dir'], process); + get extensionsDownloadPath(): string { + const fromArgs = parsePathArg(this._args['extensions-download-dir'], process); + if (fromArgs) { + return fromArgs; + } else { + return path.join(this.userDataPath, 'CachedExtensionVSIXs'); + } } @memoize diff --git a/src/vs/platform/extensionManagement/node/extensionDownloader.ts b/src/vs/platform/extensionManagement/node/extensionDownloader.ts index bde78e8d80beb..62f1a29044401 100644 --- a/src/vs/platform/extensionManagement/node/extensionDownloader.ts +++ b/src/vs/platform/extensionManagement/node/extensionDownloader.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { tmpdir } from 'os'; import { Disposable } from 'vs/base/common/lifecycle'; import { IFileService, IFileStatWithMetadata } from 'vs/platform/files/common/files'; import { IExtensionGalleryService, IGalleryExtension, InstallOperation } from 'vs/platform/extensionManagement/common/extensionManagement'; @@ -20,9 +19,9 @@ const ExtensionIdVersionRegex = /^([^.]+\..+)-(\d+\.\d+\.\d+)$/; export class ExtensionsDownloader extends Disposable { - private readonly extensionsDownloadDir: URI = URI.file(tmpdir()); - private readonly cache: number = 0; - private readonly cleanUpPromise: Promise = Promise.resolve(); + private readonly extensionsDownloadDir: URI; + private readonly cache: number; + private readonly cleanUpPromise: Promise; constructor( @IEnvironmentService environmentService: INativeEnvironmentService, @@ -31,11 +30,9 @@ export class ExtensionsDownloader extends Disposable { @ILogService private readonly logService: ILogService, ) { super(); - if (environmentService.extensionsDownloadPath) { - this.extensionsDownloadDir = URI.file(environmentService.extensionsDownloadPath); - this.cache = 20; // Cache 20 downloads - this.cleanUpPromise = this.cleanUp(); - } + this.extensionsDownloadDir = URI.file(environmentService.extensionsDownloadPath); + this.cache = 20; // Cache 20 downloads + this.cleanUpPromise = this.cleanUp(); } async downloadExtension(extension: IGalleryExtension, operation: InstallOperation): Promise { @@ -46,10 +43,7 @@ export class ExtensionsDownloader extends Disposable { } async delete(location: URI): Promise { - // Delete immediately if caching is disabled - if (!this.cache) { - await this.fileService.del(location); - } + // noop as caching is enabled always } private async download(extension: IGalleryExtension, location: URI, operation: InstallOperation): Promise {