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

Merge pull request #52330 from Microsoft/isidorn/fsReadonly

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