From 3439fcfe2390f59c37f3a04d81063ee3121589a2 Mon Sep 17 00:00:00 2001 From: Owen Kelly Date: Mon, 4 Apr 2022 01:36:05 +1000 Subject: [PATCH 1/2] [Bug?]: ZipFS extension broken on VSCode 1.66 Fixes #4304 --- .../vscode-zipfs/sources/ZipFSProvider.ts | 20 ++++++++++--------- packages/vscode-zipfs/sources/index.ts | 13 ++++++++++-- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/packages/vscode-zipfs/sources/ZipFSProvider.ts b/packages/vscode-zipfs/sources/ZipFSProvider.ts index 998f3c9ed1b5..3e42df6160ca 100644 --- a/packages/vscode-zipfs/sources/ZipFSProvider.ts +++ b/packages/vscode-zipfs/sources/ZipFSProvider.ts @@ -2,6 +2,8 @@ import {ZipOpenFS, VirtualFS, PosixFS, npath} from '@yarnpkg/fslib'; import {getLibzipSync} from '@yarnpkg/libzip'; import * as vscode from 'vscode'; +import {parseUri} from './index'; + export class ZipFSProvider implements vscode.FileSystemProvider { private readonly fs = new PosixFS( new VirtualFS({ @@ -14,11 +16,11 @@ export class ZipFSProvider implements vscode.FileSystemProvider { ); stat(uri: vscode.Uri): vscode.FileStat { - const stat: any = this.fs.statSync(uri.fsPath); + const stat: any = this.fs.statSync(parseUri(uri)); switch (true) { case stat.isDirectory(): - case npath.extname(uri.fsPath) === `.zip`: { + case npath.extname(parseUri(uri)) === `.zip`: { stat.type = vscode.FileType.Directory; } break; @@ -39,7 +41,7 @@ export class ZipFSProvider implements vscode.FileSystemProvider { } readDirectory(uri: vscode.Uri): Array<[string, vscode.FileType]> { - const listing = this.fs.readdirSync(uri.fsPath); + const listing = this.fs.readdirSync(parseUri(uri)); return listing.map(entry => { const {type} = this.stat(vscode.Uri.joinPath(uri, entry)); @@ -48,16 +50,16 @@ export class ZipFSProvider implements vscode.FileSystemProvider { } readFile(uri: vscode.Uri): Uint8Array { - return this.fs.readFileSync(uri.fsPath); + return this.fs.readFileSync(parseUri(uri)); } writeFile(uri: vscode.Uri, content: Uint8Array, options: {create: boolean, overwrite: boolean}): void { - if (!options.create && !this.fs.existsSync(uri.fsPath)) + if (!options.create && !this.fs.existsSync(parseUri(uri))) throw vscode.FileSystemError.FileNotFound(uri); - if (options.create && !options.overwrite && this.fs.existsSync(uri.fsPath)) + if (options.create && !options.overwrite && this.fs.existsSync(parseUri(uri))) throw vscode.FileSystemError.FileExists(uri); - this.fs.writeFileSync(uri.fsPath, Buffer.from(content)); + this.fs.writeFileSync(parseUri(uri), Buffer.from(content)); } rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { overwrite: boolean }): void { @@ -65,11 +67,11 @@ export class ZipFSProvider implements vscode.FileSystemProvider { } delete(uri: vscode.Uri, options: {recursive: boolean}): void { - this.fs.removeSync(uri.fsPath, options); + this.fs.removeSync(parseUri(uri), options); } createDirectory(uri: vscode.Uri): void { - this.fs.mkdirSync(uri.fsPath); + this.fs.mkdirSync(parseUri(uri)); } private _emitter = new vscode.EventEmitter>(); diff --git a/packages/vscode-zipfs/sources/index.ts b/packages/vscode-zipfs/sources/index.ts index f44249860116..a894e77a8e01 100644 --- a/packages/vscode-zipfs/sources/index.ts +++ b/packages/vscode-zipfs/sources/index.ts @@ -1,11 +1,20 @@ -import {npath} from '@yarnpkg/fslib'; +import {npath, NativePath} from '@yarnpkg/fslib'; +import path from 'path'; import * as vscode from 'vscode'; + import {registerTerminalLinkProvider} from './TerminalLinkProvider'; import {ZipFSProvider} from './ZipFSProvider'; + +export function parseUri(uri: vscode.Uri): NativePath { + const p = `${path.sep}${uri.authority}${path.sep}${uri.fsPath}` as NativePath; + + return p; +} + function mount(uri: vscode.Uri) { - const zipUri = vscode.Uri.parse(`zip:${uri.fsPath}`); + const zipUri = vscode.Uri.parse(`zip:${parseUri(uri)}`); if (vscode.workspace.getWorkspaceFolder(zipUri) === undefined) { vscode.workspace.updateWorkspaceFolders(vscode.workspace.workspaceFolders!.length, 0, { From e0c1e6b0393a96436020d4fbccb9ddccc24e0a01 Mon Sep 17 00:00:00 2001 From: Owen Kelly Date: Mon, 4 Apr 2022 01:44:28 +1000 Subject: [PATCH 2/2] Update packages/vscode-zipfs/sources/index.ts --- packages/vscode-zipfs/sources/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/vscode-zipfs/sources/index.ts b/packages/vscode-zipfs/sources/index.ts index a894e77a8e01..1c5ab7b39019 100644 --- a/packages/vscode-zipfs/sources/index.ts +++ b/packages/vscode-zipfs/sources/index.ts @@ -2,7 +2,6 @@ import {npath, NativePath} from '@yarnpkg/fslib'; import path from 'path'; import * as vscode from 'vscode'; - import {registerTerminalLinkProvider} from './TerminalLinkProvider'; import {ZipFSProvider} from './ZipFSProvider';