Allow FileSystemProvider to stat a file as readonly (#73122) (#111237)

* fix #73122 allow FSP to stat a file as readonly

* add enableProposedApi check

* omit existing members of FileStat

* dispose _enableProposedApi

* implement feedback from @bpasero

* add onDidChangeReadonly event so tab title gets '(read-only)' suffix immediately

* push missing changes

* adopt latest API proposal

* fix missing property in mtfs

* tests - add fileservice test for readonly

* more tests

* wire into notebooks

Co-authored-by: Benjamin Pasero <benjamin.pasero@microsoft.com>
This commit is contained in:
John Murray
2021-05-12 08:17:34 +01:00
committed by GitHub
parent d785c83fb9
commit 793a123a81
19 changed files with 171 additions and 21 deletions

View File

@@ -6,7 +6,7 @@
import { Emitter, Event } from 'vs/base/common/event';
import { IDisposable, dispose, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
import { URI, UriComponents } from 'vs/base/common/uri';
import { FileWriteOptions, FileSystemProviderCapabilities, IFileChange, IFileService, IStat, IWatchOptions, FileType, FileOverwriteOptions, FileDeleteOptions, FileOpenOptions, IFileStat, FileOperationError, FileOperationResult, FileSystemProviderErrorCode, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithFileFolderCopyCapability } from 'vs/platform/files/common/files';
import { FileWriteOptions, FileSystemProviderCapabilities, IFileChange, IFileService, IStat, IWatchOptions, FileType, FileOverwriteOptions, FileDeleteOptions, FileOpenOptions, IFileStat, FileOperationError, FileOperationResult, FileSystemProviderErrorCode, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithFileFolderCopyCapability, FilePermission } from 'vs/platform/files/common/files';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { ExtHostContext, ExtHostFileSystemShape, IExtHostContext, IFileChangeDto, MainContext, MainThreadFileSystemShape } from '../common/extHost.protocol';
import { VSBuffer } from 'vs/base/common/buffer';
@@ -65,6 +65,7 @@ export class MainThreadFileSystem implements MainThreadFileSystemShape {
ctime: stat.ctime,
mtime: stat.mtime,
size: stat.size,
permissions: MainThreadFileSystem._asFilePermission(stat),
type: MainThreadFileSystem._asFileType(stat)
};
}).catch(MainThreadFileSystem._handleError);
@@ -95,6 +96,13 @@ export class MainThreadFileSystem implements MainThreadFileSystemShape {
return res;
}
private static _asFilePermission(stat: IFileStat): FilePermission | undefined {
if (stat.readonly) {
return FilePermission.Readonly;
}
return undefined;
}
$readFile(uri: UriComponents): Promise<VSBuffer> {
return this._fileService.readFile(URI.revive(uri)).then(file => file.value).catch(MainThreadFileSystem._handleError);
}