diff --git a/src/vs/workbench/services/userData/common/fileUserDataProvider.ts b/src/vs/workbench/services/userData/common/fileUserDataProvider.ts index 9138dfc2d337d1864949f8039a8af3219146f172..64a6fa47cf46555adb0614f790284edb45b9df0d 100644 --- a/src/vs/workbench/services/userData/common/fileUserDataProvider.ts +++ b/src/vs/workbench/services/userData/common/fileUserDataProvider.ts @@ -7,13 +7,13 @@ import { Event, Emitter } from 'vs/base/common/event'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import { IFileSystemProviderWithFileReadWriteCapability, IFileChange, IWatchOptions, IStat, FileOverwriteOptions, FileType, FileWriteOptions, FileDeleteOptions, FileSystemProviderCapabilities, IFileSystemProviderWithOpenReadWriteCloseCapability, FileOpenOptions, hasReadWriteCapability, hasOpenReadWriteCloseCapability, IFileSystemProviderWithFileReadStreamCapability, FileReadStreamOptions, hasFileReadStreamCapability } from 'vs/platform/files/common/files'; import { URI } from 'vs/base/common/uri'; -import { extUriBiasedIgnorePathCase as resources } from 'vs/base/common/resources'; import { startsWith } from 'vs/base/common/strings'; import { BACKUPS } from 'vs/platform/environment/common/environment'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { CancellationToken } from 'vs/base/common/cancellation'; import { ReadableStreamEvents } from 'vs/base/common/stream'; import { ILogService } from 'vs/platform/log/common/log'; +import { ExtUri, extUri, extUriIgnorePathCase } from 'vs/base/common/resources'; export class FileUserDataProvider extends Disposable implements IFileSystemProviderWithFileReadWriteCapability, @@ -27,6 +27,7 @@ export class FileUserDataProvider extends Disposable implements readonly onDidChangeFile: Event = this._onDidChangeFile.event; private readonly userDataHome: URI; + private readonly extUri: ExtUri; constructor( private readonly fileSystemUserDataHome: URI, @@ -39,6 +40,9 @@ export class FileUserDataProvider extends Disposable implements this.userDataHome = environmentService.userRoamingDataHome; + this.extUri = !!(this.capabilities & FileSystemProviderCapabilities.PathCaseSensitive) ? extUri : extUriIgnorePathCase; + // Not required to update extUri as capabilites will not change. + // Assumption: This path always exists this._register(this.fileSystemProvider.watch(this.fileSystemUserDataHome, { recursive: false, excludes: [] })); this._register(this.fileSystemProvider.onDidChangeFile(e => this.handleFileChanges(e))); @@ -135,21 +139,21 @@ export class FileUserDataProvider extends Disposable implements } private toFileSystemResource(userDataResource: URI): URI { - const relativePath = resources.relativePath(this.userDataHome, userDataResource)!; + const relativePath = this.extUri.relativePath(this.userDataHome, userDataResource)!; if (startsWith(relativePath, BACKUPS)) { - return resources.joinPath(resources.dirname(this.fileSystemBackupsHome), relativePath); + return this.extUri.joinPath(this.extUri.dirname(this.fileSystemBackupsHome), relativePath); } - return resources.joinPath(this.fileSystemUserDataHome, relativePath); + return this.extUri.joinPath(this.fileSystemUserDataHome, relativePath); } private toUserDataResource(fileSystemResource: URI): URI | null { - if (resources.isEqualOrParent(fileSystemResource, this.fileSystemUserDataHome)) { - const relativePath = resources.relativePath(this.fileSystemUserDataHome, fileSystemResource); - return relativePath ? resources.joinPath(this.userDataHome, relativePath) : this.userDataHome; + if (this.extUri.isEqualOrParent(fileSystemResource, this.fileSystemUserDataHome)) { + const relativePath = this.extUri.relativePath(this.fileSystemUserDataHome, fileSystemResource); + return relativePath ? this.extUri.joinPath(this.userDataHome, relativePath) : this.userDataHome; } - if (resources.isEqualOrParent(fileSystemResource, this.fileSystemBackupsHome)) { - const relativePath = resources.relativePath(this.fileSystemBackupsHome, fileSystemResource); - return relativePath ? resources.joinPath(this.userDataHome, BACKUPS, relativePath) : resources.joinPath(this.userDataHome, BACKUPS); + if (this.extUri.isEqualOrParent(fileSystemResource, this.fileSystemBackupsHome)) { + const relativePath = this.extUri.relativePath(this.fileSystemBackupsHome, fileSystemResource); + return relativePath ? this.extUri.joinPath(this.userDataHome, BACKUPS, relativePath) : this.extUri.joinPath(this.userDataHome, BACKUPS); } return null; }