mirror of
https://github.com/Microsoft/vscode
synced 2024-09-19 10:40:41 +00:00
💄 file service errors
This commit is contained in:
parent
9349e9a2fd
commit
5410d71fb4
|
@ -46,7 +46,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
|
||||
registerProvider(scheme: string, provider: IFileSystemProvider): IDisposable {
|
||||
if (this.provider.has(scheme)) {
|
||||
throw new Error(`A provider for the scheme ${scheme} is already registered.`);
|
||||
throw new Error(`A filesystem provider for the scheme '${scheme}' is already registered.`);
|
||||
}
|
||||
|
||||
// Add provider with event
|
||||
|
@ -106,7 +106,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
|
||||
// Assert path is absolute
|
||||
if (!isAbsolutePath(resource)) {
|
||||
throw new FileOperationError(localize('invalidPath', "The path of resource '{0}' must be absolute", this.resourceForError(resource)), FileOperationResult.FILE_INVALID_PATH);
|
||||
throw new FileOperationError(localize('invalidPath', "Unable to resolve filesystem provider with relative file path '{0}'", this.resourceForError(resource)), FileOperationResult.FILE_INVALID_PATH);
|
||||
}
|
||||
|
||||
// Activate provider
|
||||
|
@ -132,7 +132,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
return provider;
|
||||
}
|
||||
|
||||
throw new Error(`Provider for scheme '${resource.scheme}' neither has FileReadWrite, FileReadStream nor FileOpenReadWriteClose capability which is needed for the read operation.`);
|
||||
throw new Error(`Filesystem provider for scheme '${resource.scheme}' neither has FileReadWrite, FileReadStream nor FileOpenReadWriteClose capability which is needed for the read operation.`);
|
||||
}
|
||||
|
||||
private async withWriteProvider(resource: URI): Promise<IFileSystemProviderWithFileReadWriteCapability | IFileSystemProviderWithOpenReadWriteCloseCapability> {
|
||||
|
@ -142,7 +142,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
return provider;
|
||||
}
|
||||
|
||||
throw new Error(`Provider for scheme '${resource.scheme}' neither has FileReadWrite nor FileOpenReadWriteClose capability which is needed for the write operation.`);
|
||||
throw new Error(`Filesystem provider for scheme '${resource.scheme}' neither has FileReadWrite nor FileOpenReadWriteClose capability which is needed for the write operation.`);
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
@ -164,7 +164,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
|
||||
// Specially handle file not found case as file operation result
|
||||
if (toFileSystemProviderErrorCode(error) === FileSystemProviderErrorCode.FileNotFound) {
|
||||
throw new FileOperationError(localize('fileNotFoundError', "File not found ({0})", this.resourceForError(resource)), FileOperationResult.FILE_NOT_FOUND);
|
||||
throw new FileOperationError(localize('fileNotFoundError', "Unable to resolve non-existing file '{0}'", this.resourceForError(resource)), FileOperationResult.FILE_NOT_FOUND);
|
||||
}
|
||||
|
||||
// Bubble up any other error as is
|
||||
|
@ -292,7 +292,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
|
||||
// validate overwrite
|
||||
if (!options?.overwrite && await this.exists(resource)) {
|
||||
throw new FileOperationError(localize('fileExists', "File to create already exists ({0})", this.resourceForError(resource)), FileOperationResult.FILE_MODIFIED_SINCE, options);
|
||||
throw new FileOperationError(localize('fileExists', "Unable to create file '{0}' that already exists when overwrite flag is not set", this.resourceForError(resource)), FileOperationResult.FILE_MODIFIED_SINCE, options);
|
||||
}
|
||||
|
||||
// do write into file (this will create it too)
|
||||
|
@ -355,7 +355,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
|
||||
// file cannot be directory
|
||||
if ((stat.type & FileType.Directory) !== 0) {
|
||||
throw new FileOperationError(localize('fileIsDirectoryError', "Expected file '{0}' is actually a directory", this.resourceForError(resource)), FileOperationResult.FILE_IS_DIRECTORY, options);
|
||||
throw new FileOperationError(localize('fileIsDirectoryWriteError', "Unable to write file '{0}' that is actually a directory", this.resourceForError(resource)), FileOperationResult.FILE_IS_DIRECTORY, options);
|
||||
}
|
||||
|
||||
// Dirty write prevention: if the file on disk has been changed and does not match our expected
|
||||
|
@ -504,7 +504,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
|
||||
// Throw if resource is a directory
|
||||
if (stat.isDirectory) {
|
||||
throw new FileOperationError(localize('fileIsDirectoryError', "Expected file '{0}' is actually a directory", this.resourceForError(resource)), FileOperationResult.FILE_IS_DIRECTORY, options);
|
||||
throw new FileOperationError(localize('fileIsDirectoryReadError', "Unable to read file '{0}' that is actually a directory", this.resourceForError(resource)), FileOperationResult.FILE_IS_DIRECTORY, options);
|
||||
}
|
||||
|
||||
// Throw if file not modified since (unless disabled)
|
||||
|
@ -531,7 +531,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
}
|
||||
|
||||
if (typeof tooLargeErrorResult === 'number') {
|
||||
throw new FileOperationError(localize('fileTooLargeError', "File '{0}' is too large to open", this.resourceForError(resource)), tooLargeErrorResult);
|
||||
throw new FileOperationError(localize('fileTooLargeError', "Unable to read file '{0}' that is too large to open", this.resourceForError(resource)), tooLargeErrorResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -693,7 +693,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
|
||||
// Bail out if target exists and we are not about to overwrite
|
||||
if (!overwrite) {
|
||||
throw new FileOperationError(localize('unableToMoveCopyError3', "Unable to move/copy since a file already exists at destination."), FileOperationResult.FILE_MOVE_CONFLICT);
|
||||
throw new FileOperationError(localize('unableToMoveCopyError3', "Unable to move/copy '{0}' because target '{1}' already exists at destination.", this.resourceForError(source), this.resourceForError(target)), FileOperationResult.FILE_MOVE_CONFLICT);
|
||||
}
|
||||
|
||||
// Special case: if the target is a parent of the source, we cannot delete
|
||||
|
@ -701,7 +701,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
if (sourceProvider === targetProvider) {
|
||||
const isPathCaseSensitive = !!(sourceProvider.capabilities & FileSystemProviderCapabilities.PathCaseSensitive);
|
||||
if (isEqualOrParent(source, target, !isPathCaseSensitive)) {
|
||||
throw new Error(localize('unableToMoveCopyError4', "Unable to move/copy since a file would replace the folder it is contained in."));
|
||||
throw new Error(localize('unableToMoveCopyError4', "Unable to move/copy '{0}' into '{1}' since a file would replace the folder it is contained in.", this.resourceForError(source), this.resourceForError(target)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -730,7 +730,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
try {
|
||||
const stat = await provider.stat(directory);
|
||||
if ((stat.type & FileType.Directory) === 0) {
|
||||
throw new Error(localize('mkdirExistsError', "Path '{0}' already exists, but is not a directory", this.resourceForError(directory)));
|
||||
throw new Error(localize('mkdirExistsError', "Unable to create folder '{0}' that already exists but is not a directory", this.resourceForError(directory)));
|
||||
}
|
||||
|
||||
break; // we have hit a directory that exists -> good
|
||||
|
@ -762,13 +762,13 @@ export class FileService extends Disposable implements IFileService {
|
|||
// Validate trash support
|
||||
const useTrash = !!options?.useTrash;
|
||||
if (useTrash && !(provider.capabilities & FileSystemProviderCapabilities.Trash)) {
|
||||
throw new Error(localize('err.trash', "Provider for scheme '{0}' does not support trash.", resource.scheme));
|
||||
throw new Error(localize('deleteFailedTrashUnsupported', "Unable to delete file '{0}' via trash because provider does not support it.", this.resourceForError(resource)));
|
||||
}
|
||||
|
||||
// Validate delete
|
||||
const exists = await this.exists(resource);
|
||||
if (!exists) {
|
||||
throw new FileOperationError(localize('fileNotFoundError', "File not found ({0})", this.resourceForError(resource)), FileOperationResult.FILE_NOT_FOUND);
|
||||
throw new FileOperationError(localize('deleteFailedNotFound', "Unable to delete non-existing file '{0}'", this.resourceForError(resource)), FileOperationResult.FILE_NOT_FOUND);
|
||||
}
|
||||
|
||||
// Validate recursive
|
||||
|
@ -776,7 +776,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
if (!recursive && exists) {
|
||||
const stat = await this.resolve(resource);
|
||||
if (stat.isDirectory && Array.isArray(stat.children) && stat.children.length > 0) {
|
||||
throw new Error(localize('deleteFailed', "Unable to delete non-empty folder '{0}'.", this.resourceForError(resource)));
|
||||
throw new Error(localize('deleteFailedNonEmptyFolder', "Unable to delete non-empty folder '{0}'.", this.resourceForError(resource)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1059,7 +1059,7 @@ export class FileService extends Disposable implements IFileService {
|
|||
|
||||
protected throwIfFileSystemIsReadonly<T extends IFileSystemProvider>(provider: T, resource: URI): T {
|
||||
if (provider.capabilities & FileSystemProviderCapabilities.Readonly) {
|
||||
throw new FileOperationError(localize('err.readonly', "Resource '{0}' can not be modified.", this.resourceForError(resource)), FileOperationResult.FILE_PERMISSION_DENIED);
|
||||
throw new FileOperationError(localize('err.readonly', "Unable to modify readonly file '{0}'", this.resourceForError(resource)), FileOperationResult.FILE_PERMISSION_DENIED);
|
||||
}
|
||||
|
||||
return provider;
|
||||
|
|
Loading…
Reference in a new issue