files - always use createFileSystemProviderError (#173106)

This commit is contained in:
Benjamin Pasero
2023-02-02 10:41:03 +01:00
committed by GitHub
parent 14f13b1f20
commit cf66f5ca3d
5 changed files with 36 additions and 32 deletions
@@ -304,10 +304,10 @@ export class IndexedDBFileSystemProvider extends Disposable implements IFileSyst
const toEntry = fileTree.read(to.path);
if (toEntry) {
if (!opts.overwrite) {
throw new FileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
throw createFileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
}
if (toEntry.type !== fromEntry.type) {
throw new FileSystemProviderError('Cannot rename files with different types', FileSystemProviderErrorCode.Unknown);
throw createFileSystemProviderError('Cannot rename files with different types', FileSystemProviderErrorCode.Unknown);
}
// delete the target file if exists
await this.delete(to, { recursive: true, useTrash: false });
+9 -5
View File
@@ -625,16 +625,20 @@ export interface IFileSystemProviderError extends Error {
export class FileSystemProviderError extends Error implements IFileSystemProviderError {
constructor(message: string, readonly code: FileSystemProviderErrorCode) {
static create(error: Error | string, code: FileSystemProviderErrorCode): FileSystemProviderError {
const providerError = new FileSystemProviderError(error.toString(), code);
markAsFileSystemProviderError(providerError, code);
return providerError;
}
private constructor(message: string, readonly code: FileSystemProviderErrorCode) {
super(message);
}
}
export function createFileSystemProviderError(error: Error | string, code: FileSystemProviderErrorCode): FileSystemProviderError {
const providerError = new FileSystemProviderError(error.toString(), code);
markAsFileSystemProviderError(providerError, code);
return providerError;
return FileSystemProviderError.create(error, code);
}
export function ensureFileSystemProviderError(error?: Error): Error {
@@ -7,7 +7,7 @@ import { Emitter, Event } from 'vs/base/common/event';
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import * as resources from 'vs/base/common/resources';
import { URI } from 'vs/base/common/uri';
import { FileChangeType, IFileDeleteOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions } from 'vs/platform/files/common/files';
import { FileChangeType, IFileDeleteOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions, createFileSystemProviderError } from 'vs/platform/files/common/files';
class File implements IStat {
@@ -89,7 +89,7 @@ export class InMemoryFileSystemProvider extends Disposable implements IFileSyste
if (data) {
return data;
}
throw new FileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
}
async writeFile(resource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise<void> {
@@ -97,13 +97,13 @@ export class InMemoryFileSystemProvider extends Disposable implements IFileSyste
const parent = this._lookupParentDirectory(resource);
let entry = parent.entries.get(basename);
if (entry instanceof Directory) {
throw new FileSystemProviderError('file is directory', FileSystemProviderErrorCode.FileIsADirectory);
throw createFileSystemProviderError('file is directory', FileSystemProviderErrorCode.FileIsADirectory);
}
if (!entry && !opts.create) {
throw new FileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
}
if (entry && opts.create && !opts.overwrite) {
throw new FileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
throw createFileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
}
if (!entry) {
entry = new File(basename);
@@ -121,7 +121,7 @@ export class InMemoryFileSystemProvider extends Disposable implements IFileSyste
async rename(from: URI, to: URI, opts: IFileOverwriteOptions): Promise<void> {
if (!opts.overwrite && this._lookup(to, true)) {
throw new FileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
throw createFileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
}
const entry = this._lookup(from, false);
@@ -154,7 +154,7 @@ export class InMemoryFileSystemProvider extends Disposable implements IFileSyste
async mkdir(resource: URI): Promise<void> {
if (this._lookup(resource, true)) {
throw new FileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
throw createFileSystemProviderError('file exists already', FileSystemProviderErrorCode.FileExists);
}
const basename = resources.basename(resource);
@@ -185,7 +185,7 @@ export class InMemoryFileSystemProvider extends Disposable implements IFileSyste
}
if (!child) {
if (!silent) {
throw new FileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
} else {
return undefined;
}
@@ -200,7 +200,7 @@ export class InMemoryFileSystemProvider extends Disposable implements IFileSyste
if (entry instanceof Directory) {
return entry;
}
throw new FileSystemProviderError('file not a directory', FileSystemProviderErrorCode.FileNotADirectory);
throw createFileSystemProviderError('file not a directory', FileSystemProviderErrorCode.FileNotADirectory);
}
private _lookupAsFile(uri: URI, silent: boolean): File {
@@ -208,7 +208,7 @@ export class InMemoryFileSystemProvider extends Disposable implements IFileSyste
if (entry instanceof File) {
return entry;
}
throw new FileSystemProviderError('file is a directory', FileSystemProviderErrorCode.FileIsADirectory);
throw createFileSystemProviderError('file is a directory', FileSystemProviderErrorCode.FileIsADirectory);
}
private _lookupParentDirectory(uri: URI): Directory {
@@ -9,7 +9,7 @@ import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecy
import { clamp } from 'vs/base/common/numbers';
import { assertNever } from 'vs/base/common/assert';
import { URI } from 'vs/base/common/uri';
import { FileChangeType, IFileOpenOptions, FilePermission, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileChange, IFileSystemProvider, IStat, IWatchOptions } from 'vs/platform/files/common/files';
import { FileChangeType, IFileOpenOptions, FilePermission, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, IFileChange, IFileSystemProvider, IStat, IWatchOptions, createFileSystemProviderError } from 'vs/platform/files/common/files';
import { DEBUG_MEMORY_SCHEME, IDebugService, IDebugSession, IMemoryInvalidationEvent, IMemoryRegion, MemoryRange, MemoryRangeType, State } from 'vs/workbench/contrib/debug/common/debug';
const rangeRe = /range=([0-9]+):([0-9]+)/;
@@ -83,22 +83,22 @@ export class DebugMemoryFileSystemProvider implements IFileSystemProvider {
/** @inheritdoc */
public mkdir(): never {
throw new FileSystemProviderError(`Not allowed`, FileSystemProviderErrorCode.NoPermissions);
throw createFileSystemProviderError(`Not allowed`, FileSystemProviderErrorCode.NoPermissions);
}
/** @inheritdoc */
public readdir(): never {
throw new FileSystemProviderError(`Not allowed`, FileSystemProviderErrorCode.NoPermissions);
throw createFileSystemProviderError(`Not allowed`, FileSystemProviderErrorCode.NoPermissions);
}
/** @inheritdoc */
public delete(): never {
throw new FileSystemProviderError(`Not allowed`, FileSystemProviderErrorCode.NoPermissions);
throw createFileSystemProviderError(`Not allowed`, FileSystemProviderErrorCode.NoPermissions);
}
/** @inheritdoc */
public rename(): never {
throw new FileSystemProviderError(`Not allowed`, FileSystemProviderErrorCode.NoPermissions);
throw createFileSystemProviderError(`Not allowed`, FileSystemProviderErrorCode.NoPermissions);
}
/** @inheritdoc */
@@ -125,7 +125,7 @@ export class DebugMemoryFileSystemProvider implements IFileSystemProvider {
public async writeFile(resource: URI, content: Uint8Array) {
const { offset } = this.parseUri(resource);
if (!offset) {
throw new FileSystemProviderError(`Range must be present to read a file`, FileSystemProviderErrorCode.FileNotFound);
throw createFileSystemProviderError(`Range must be present to read a file`, FileSystemProviderErrorCode.FileNotFound);
}
const fd = await this.open(resource, { create: false });
@@ -141,7 +141,7 @@ export class DebugMemoryFileSystemProvider implements IFileSystemProvider {
public async readFile(resource: URI) {
const { offset } = this.parseUri(resource);
if (!offset) {
throw new FileSystemProviderError(`Range must be present to read a file`, FileSystemProviderErrorCode.FileNotFound);
throw createFileSystemProviderError(`Range must be present to read a file`, FileSystemProviderErrorCode.FileNotFound);
}
const data = new Uint8Array(offset.toOffset - offset.fromOffset);
@@ -159,7 +159,7 @@ export class DebugMemoryFileSystemProvider implements IFileSystemProvider {
public async read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise<number> {
const memory = this.fdMemory.get(fd);
if (!memory) {
throw new FileSystemProviderError(`No file with that descriptor open`, FileSystemProviderErrorCode.Unavailable);
throw createFileSystemProviderError(`No file with that descriptor open`, FileSystemProviderErrorCode.Unavailable);
}
const ranges = await memory.region.read(pos, length);
@@ -172,7 +172,7 @@ export class DebugMemoryFileSystemProvider implements IFileSystemProvider {
if (readSoFar > 0) {
return readSoFar;
} else {
throw new FileSystemProviderError(range.error, FileSystemProviderErrorCode.Unknown);
throw createFileSystemProviderError(range.error, FileSystemProviderErrorCode.Unknown);
}
case MemoryRangeType.Valid: {
const start = Math.max(0, pos - range.offset);
@@ -193,7 +193,7 @@ export class DebugMemoryFileSystemProvider implements IFileSystemProvider {
public write(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise<number> {
const memory = this.fdMemory.get(fd);
if (!memory) {
throw new FileSystemProviderError(`No file with that descriptor open`, FileSystemProviderErrorCode.Unavailable);
throw createFileSystemProviderError(`No file with that descriptor open`, FileSystemProviderErrorCode.Unavailable);
}
return memory.region.write(pos, VSBuffer.wrap(data).slice(offset, offset + length));
@@ -201,12 +201,12 @@ export class DebugMemoryFileSystemProvider implements IFileSystemProvider {
protected parseUri(uri: URI) {
if (uri.scheme !== DEBUG_MEMORY_SCHEME) {
throw new FileSystemProviderError(`Cannot open file with scheme ${uri.scheme}`, FileSystemProviderErrorCode.FileNotFound);
throw createFileSystemProviderError(`Cannot open file with scheme ${uri.scheme}`, FileSystemProviderErrorCode.FileNotFound);
}
const session = this.debugService.getModel().getSession(uri.authority);
if (!session) {
throw new FileSystemProviderError(`Debug session not found`, FileSystemProviderErrorCode.FileNotFound);
throw createFileSystemProviderError(`Debug session not found`, FileSystemProviderErrorCode.FileNotFound);
}
let offset: { fromOffset: number; toOffset: number } | undefined;
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { FileSystemProviderCapabilities, IStat, FileType, IFileDeleteOptions, IFileOverwriteOptions, IFileWriteOptions, FileSystemProviderError, FileSystemProviderErrorCode, IFileSystemProviderWithFileReadWriteCapability } from 'vs/platform/files/common/files';
import { FileSystemProviderCapabilities, IStat, FileType, IFileDeleteOptions, IFileOverwriteOptions, IFileWriteOptions, FileSystemProviderErrorCode, IFileSystemProviderWithFileReadWriteCapability, createFileSystemProviderError } from 'vs/platform/files/common/files';
import { Event } from 'vs/base/common/event';
import { IDisposable, Disposable } from 'vs/base/common/lifecycle';
import { URI } from 'vs/base/common/uri';
@@ -22,9 +22,9 @@ export class FetchFileSystemProvider implements IFileSystemProviderWithFileReadW
if (res.status === 200) {
return new Uint8Array(await res.arrayBuffer());
}
throw new FileSystemProviderError(res.statusText, FileSystemProviderErrorCode.Unknown);
throw createFileSystemProviderError(res.statusText, FileSystemProviderErrorCode.Unknown);
} catch (err) {
throw new FileSystemProviderError(err, FileSystemProviderErrorCode.Unknown);
throw createFileSystemProviderError(err, FileSystemProviderErrorCode.Unknown);
}
}