44 *--------------------------------------------------------------------------------------------*/
55
66import { Disposable } from 'vs/base/common/lifecycle' ;
7- import { IFileService , IFileContent , FileChangesEvent , FileOperationResult , FileOperationError } from 'vs/platform/files/common/files' ;
7+ import { IFileService , IFileContent , FileChangesEvent , FileOperationResult , FileOperationError , FileSystemProviderCapabilities } from 'vs/platform/files/common/files' ;
88import { VSBuffer } from 'vs/base/common/buffer' ;
99import { URI } from 'vs/base/common/uri' ;
1010import {
@@ -13,7 +13,7 @@ import {
1313 IUserDataManifest , ISyncData , IRemoteUserData , PREVIEW_DIR_NAME , IResourcePreview as IBaseResourcePreview , Change , MergeState , IUserDataInitializer
1414} from 'vs/platform/userDataSync/common/userDataSync' ;
1515import { IEnvironmentService } from 'vs/platform/environment/common/environment' ;
16- import { joinPath , dirname , isEqual , basename } from 'vs/base/common/resources' ;
16+ import { IExtUri , extUri , extUriIgnorePathCase } from 'vs/base/common/resources' ;
1717import { CancelablePromise , RunOnceScheduler , createCancelablePromise } from 'vs/base/common/async' ;
1818import { Emitter , Event } from 'vs/base/common/event' ;
1919import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry' ;
@@ -53,8 +53,8 @@ function isSyncData(thing: any): thing is ISyncData {
5353 return false ;
5454}
5555
56- function getLastSyncResourceUri ( syncResource : SyncResource , environmentService : IEnvironmentService ) : URI {
57- return joinPath ( environmentService . userDataSyncHome , syncResource , `lastSync${ syncResource } .json` ) ;
56+ function getLastSyncResourceUri ( syncResource : SyncResource , environmentService : IEnvironmentService , extUri : IExtUri ) : URI {
57+ return extUri . joinPath ( environmentService . userDataSyncHome , syncResource , `lastSync${ syncResource } .json` ) ;
5858}
5959
6060export interface IResourcePreview {
@@ -100,6 +100,7 @@ export abstract class AbstractSynchroniser extends Disposable {
100100
101101 protected readonly syncFolder : URI ;
102102 protected readonly syncPreviewFolder : URI ;
103+ protected readonly extUri : IExtUri ;
103104 private readonly currentMachineIdPromise : Promise < string > ;
104105
105106 private _status : SyncStatus = SyncStatus . Idle ;
@@ -135,9 +136,10 @@ export abstract class AbstractSynchroniser extends Disposable {
135136 ) {
136137 super ( ) ;
137138 this . syncResourceLogLabel = uppercaseFirstLetter ( this . resource ) ;
138- this . syncFolder = joinPath ( environmentService . userDataSyncHome , resource ) ;
139- this . syncPreviewFolder = joinPath ( this . syncFolder , PREVIEW_DIR_NAME ) ;
140- this . lastSyncResource = getLastSyncResourceUri ( resource , environmentService ) ;
139+ this . extUri = this . fileService . hasCapability ( environmentService . userDataSyncHome , FileSystemProviderCapabilities . PathCaseSensitive ) ? extUri : extUriIgnorePathCase ;
140+ this . syncFolder = this . extUri . joinPath ( environmentService . userDataSyncHome , resource ) ;
141+ this . syncPreviewFolder = this . extUri . joinPath ( this . syncFolder , PREVIEW_DIR_NAME ) ;
142+ this . lastSyncResource = getLastSyncResourceUri ( resource , environmentService , this . extUri ) ;
141143 this . currentMachineIdPromise = getServiceMachineId ( environmentService , fileService , storageService ) ;
142144 }
143145
@@ -423,7 +425,7 @@ export abstract class AbstractSynchroniser extends Disposable {
423425
424426 let preview = await this . syncPreviewPromise ;
425427 const index = preview . resourcePreviews . findIndex ( ( { localResource, remoteResource, previewResource } ) =>
426- isEqual ( localResource , resource ) || isEqual ( remoteResource , resource ) || isEqual ( previewResource , resource ) ) ;
428+ this . extUri . isEqual ( localResource , resource ) || this . extUri . isEqual ( remoteResource , resource ) || this . extUri . isEqual ( previewResource , resource ) ) ;
427429 if ( index === - 1 ) {
428430 return ;
429431 }
@@ -483,7 +485,7 @@ export abstract class AbstractSynchroniser extends Disposable {
483485
484486 private updateConflicts ( resourcePreviews : IEditableResourcePreview [ ] ) : void {
485487 const conflicts = resourcePreviews . filter ( ( { mergeState } ) => mergeState === MergeState . Conflict ) ;
486- if ( ! equals ( this . _conflicts , conflicts , ( a , b ) => isEqual ( a . previewResource , b . previewResource ) ) ) {
488+ if ( ! equals ( this . _conflicts , conflicts , ( a , b ) => this . extUri . isEqual ( a . previewResource , b . previewResource ) ) ) {
487489 this . _conflicts = conflicts ;
488490 this . _onDidChangeConflicts . fire ( conflicts ) ;
489491 }
@@ -513,8 +515,8 @@ export abstract class AbstractSynchroniser extends Disposable {
513515 }
514516
515517 async getMachineId ( { uri } : ISyncResourceHandle ) : Promise < string | undefined > {
516- const ref = basename ( uri ) ;
517- if ( isEqual ( uri , this . toRemoteBackupResource ( ref ) ) ) {
518+ const ref = this . extUri . basename ( uri ) ;
519+ if ( this . extUri . isEqual ( uri , this . toRemoteBackupResource ( ref ) ) ) {
518520 const { content } = await this . getUserData ( ref ) ;
519521 if ( content ) {
520522 const syncData = this . parseSyncData ( content ) ;
@@ -525,12 +527,12 @@ export abstract class AbstractSynchroniser extends Disposable {
525527 }
526528
527529 async resolveContent ( uri : URI ) : Promise < string | null > {
528- const ref = basename ( uri ) ;
529- if ( isEqual ( uri , this . toRemoteBackupResource ( ref ) ) ) {
530+ const ref = this . extUri . basename ( uri ) ;
531+ if ( this . extUri . isEqual ( uri , this . toRemoteBackupResource ( ref ) ) ) {
530532 const { content } = await this . getUserData ( ref ) ;
531533 return content ;
532534 }
533- if ( isEqual ( uri , this . toLocalBackupResource ( ref ) ) ) {
535+ if ( this . extUri . isEqual ( uri , this . toLocalBackupResource ( ref ) ) ) {
534536 return this . userDataSyncBackupStoreService . resolveContent ( this . resource , ref ) ;
535537 }
536538 return null ;
@@ -540,13 +542,13 @@ export abstract class AbstractSynchroniser extends Disposable {
540542 const syncPreview = this . syncPreviewPromise ? await this . syncPreviewPromise : null ;
541543 if ( syncPreview ) {
542544 for ( const resourcePreview of syncPreview . resourcePreviews ) {
543- if ( isEqual ( resourcePreview . acceptedResource , uri ) ) {
545+ if ( this . extUri . isEqual ( resourcePreview . acceptedResource , uri ) ) {
544546 return resourcePreview . acceptResult ? resourcePreview . acceptResult . content : null ;
545547 }
546- if ( isEqual ( resourcePreview . remoteResource , uri ) ) {
548+ if ( this . extUri . isEqual ( resourcePreview . remoteResource , uri ) ) {
547549 return resourcePreview . remoteContent ;
548550 }
549- if ( isEqual ( resourcePreview . localResource , uri ) ) {
551+ if ( this . extUri . isEqual ( resourcePreview . localResource , uri ) ) {
550552 return resourcePreview . localContent ;
551553 }
552554 }
@@ -727,7 +729,7 @@ export abstract class AbstractFileSynchroniser extends AbstractSynchroniser {
727729 @IConfigurationService configurationService : IConfigurationService ,
728730 ) {
729731 super ( resource , fileService , environmentService , storageService , userDataSyncStoreService , userDataSyncBackupStoreService , userDataSyncResourceEnablementService , telemetryService , logService , configurationService ) ;
730- this . _register ( this . fileService . watch ( dirname ( file ) ) ) ;
732+ this . _register ( this . fileService . watch ( this . extUri . dirname ( file ) ) ) ;
731733 this . _register ( this . fileService . onDidFilesChange ( e => this . onFileChanges ( e ) ) ) ;
732734 }
733735
@@ -804,6 +806,7 @@ export abstract class AbstractJsonFileSynchroniser extends AbstractFileSynchroni
804806
805807export abstract class AbstractInitializer implements IUserDataInitializer {
806808
809+ protected readonly extUri : IExtUri ;
807810 private readonly lastSyncResource : URI ;
808811
809812 constructor (
@@ -812,7 +815,8 @@ export abstract class AbstractInitializer implements IUserDataInitializer {
812815 @IUserDataSyncLogService protected readonly logService : IUserDataSyncLogService ,
813816 @IFileService protected readonly fileService : IFileService ,
814817 ) {
815- this . lastSyncResource = getLastSyncResourceUri ( this . resource , environmentService ) ;
818+ this . extUri = this . fileService . hasCapability ( environmentService . userDataSyncHome , FileSystemProviderCapabilities . PathCaseSensitive ) ? extUri : extUriIgnorePathCase ;
819+ this . lastSyncResource = getLastSyncResourceUri ( this . resource , environmentService , extUri ) ;
816820 }
817821
818822 async initialize ( { ref, content } : IUserData ) : Promise < void > {
0 commit comments