未验证 提交 72792681 编写于 作者: J Johannes Rieken 提交者: GitHub

Merge pull request #52330 from Microsoft/isidorn/fsReadonly

fileSystemProvider: isReadonly
......@@ -182,7 +182,8 @@ export enum FileSystemProviderCapabilities {
FileOpenReadWriteClose = 1 << 2,
FileFolderCopy = 1 << 3,
PathCaseSensitive = 1 << 10
PathCaseSensitive = 1 << 10,
Readonly = 1 << 11
}
export interface IFileSystemProvider {
......@@ -411,6 +412,11 @@ export interface IFileStat extends IBaseStat {
*/
isDirectory: boolean;
/**
* The resource is readonly.
*/
isReadonly?: boolean;
/**
* The resource is a symbolic link.
*/
......
......@@ -6863,7 +6863,7 @@ declare module 'vscode' {
* @param options Immutable metadata about the provider.
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
*/
export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, options?: { isCaseSensitive?: boolean }): Disposable;
export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, options?: { isCaseSensitive?: boolean, isReadonly?: boolean }): Disposable;
}
/**
......
......@@ -83,7 +83,7 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
extHostLanguageFeatures.registerDocumentLinkProvider('*', this._linkProvider);
}
registerFileSystemProvider(scheme: string, provider: vscode.FileSystemProvider, options: { isCaseSensitive?: boolean } = {}) {
registerFileSystemProvider(scheme: string, provider: vscode.FileSystemProvider, options: { isCaseSensitive?: boolean, isReadonly?: boolean } = {}) {
if (this._usedSchemes.has(scheme)) {
throw new Error(`a provider for the scheme '${scheme}' is already registered`);
......@@ -98,6 +98,9 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
if (options.isCaseSensitive) {
capabilites += files.FileSystemProviderCapabilities.PathCaseSensitive;
}
if (options.isReadonly) {
capabilites += files.FileSystemProviderCapabilities.Readonly;
}
if (typeof provider.copy === 'function') {
capabilites += files.FileSystemProviderCapabilities.FileFolderCopy;
}
......
......@@ -1129,6 +1129,7 @@ export class StatResolver {
resource: this.resource,
isDirectory: this.isDirectory,
isSymbolicLink: this.isSymbolicLink,
isReadonly: false,
name: this.name,
etag: this.etag,
size: this.size,
......@@ -1213,6 +1214,7 @@ export class StatResolver {
resource: fileResource,
isDirectory: fileStat.isDirectory(),
isSymbolicLink,
isReadonly: false,
name: file,
mtime: fileStat.mtime.getTime(),
etag: etag(fileStat),
......
......@@ -45,6 +45,7 @@ function toIFileStat(provider: IFileSystemProvider, tuple: [URI, IStat], recurse
name: posix.basename(resource.path),
isDirectory: (stat.type & FileType.Directory) !== 0,
isSymbolicLink: (stat.type & FileType.SymbolicLink) !== 0,
isReadonly: !!(provider.capabilities & FileSystemProviderCapabilities.Readonly),
mtime: stat.mtime,
size: stat.size,
etag: stat.mtime.toString(29) + stat.size.toString(31),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册