From 04aa49cbbea12433fb9cfbe3df01fa965d63e0ed Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Sun, 12 Jul 2020 21:01:26 +0200 Subject: [PATCH] #100346 merge single resource --- .../userDataSync/common/userDataSync.ts | 4 ++-- .../userDataSync/common/userDataSyncIpc.ts | 2 +- .../common/userDataSyncService.ts | 21 ++++++++----------- .../electron-browser/userDataSyncService.ts | 8 +++---- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/vs/platform/userDataSync/common/userDataSync.ts b/src/vs/platform/userDataSync/common/userDataSync.ts index ef90ccda3de..7f6c5992c40 100644 --- a/src/vs/platform/userDataSync/common/userDataSync.ts +++ b/src/vs/platform/userDataSync/common/userDataSync.ts @@ -369,10 +369,10 @@ export interface ISyncTask { export interface IManualSyncTask { readonly manifest: IUserDataManifest | null; preview(): Promise<[SyncResource, ISyncResourcePreview][]>; - merge(): Promise<[SyncResource, ISyncResourcePreview][]>; + accept(uri: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]>; + merge(uri: URI): Promise<[SyncResource, ISyncResourcePreview][]>; pull(): Promise; push(): Promise; - accept(uri: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]>; stop(): Promise; } diff --git a/src/vs/platform/userDataSync/common/userDataSyncIpc.ts b/src/vs/platform/userDataSync/common/userDataSyncIpc.ts index 6e50bd869ce..a06e412596e 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncIpc.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncIpc.ts @@ -86,7 +86,7 @@ class ManualSyncTaskChannel implements IServerChannel { switch (command) { case 'preview': return this.manualSyncTask.preview(); case 'accept': return this.manualSyncTask.accept(URI.revive(args[0]), args[1]); - case 'merge': return this.manualSyncTask.merge(); + case 'merge': return this.manualSyncTask.merge(URI.revive(args[0])); case 'pull': return this.manualSyncTask.pull(); case 'push': return this.manualSyncTask.push(); case 'stop': return this.manualSyncTask.stop(); diff --git a/src/vs/platform/userDataSync/common/userDataSyncService.ts b/src/vs/platform/userDataSync/common/userDataSyncService.ts index 88a7d116bc4..e02647b4373 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncService.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncService.ts @@ -490,22 +490,19 @@ class ManualSyncTask implements IManualSyncTask { return this.previews; } - async merge(): Promise<[SyncResource, ISyncResourcePreview][]> { + async merge(resource: URI): Promise<[SyncResource, ISyncResourcePreview][]> { if (!this.previews) { throw new Error('You need to create preview before applying'); } - const previews: [SyncResource, ISyncResourcePreview][] = []; - for (const [syncResource, preview] of this.previews) { - const synchroniser = this.synchronisers.find(s => s.resource === syncResource)!; - let newPreview: ISyncResourcePreview | null = null; - for (const resourcePreview of preview.resourcePreviews) { - newPreview = await synchroniser.merge(resourcePreview.previewResource, false, this.syncHeaders); - } - if (newPreview) { - previews.push(this.toSyncResourcePreview(syncResource, newPreview)); - } + const index = this.previews.findIndex(([, preview]) => preview.resourcePreviews.some(({ localResource, previewResource, remoteResource }) => + isEqual(resource, localResource) || isEqual(resource, previewResource) || isEqual(resource, remoteResource))); + if (index !== -1) { + const synchroniser = this.synchronisers.find(s => s.resource === this.previews![index][0])!; + /* force only if the resource is local or remote resource */ + const force = this.previews![index][1].resourcePreviews.some(({ localResource, remoteResource }) => isEqual(resource, localResource) || isEqual(resource, remoteResource)); + const preview = await synchroniser.merge(resource, force, this.syncHeaders); + preview ? this.previews.splice(index, 1, this.toSyncResourcePreview(synchroniser.resource, preview)) : this.previews.splice(index, 1); } - this.previews = previews; return this.previews; } diff --git a/src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts b/src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts index 50af70abb5c..fe3f20be488 100644 --- a/src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts +++ b/src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts @@ -181,12 +181,12 @@ class ManualSyncTask implements IManualSyncTask { ])); } - accept(uri: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]> { - return this.channel.call('accept', [uri, content]); + accept(resource: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]> { + return this.channel.call('accept', [resource, content]); } - merge(): Promise<[SyncResource, ISyncResourcePreview][]> { - return this.channel.call('merge'); + merge(resource: URI): Promise<[SyncResource, ISyncResourcePreview][]> { + return this.channel.call('merge', [resource]); } pull(): Promise {