Skip to content

Commit 04aa49c

Browse files
committed
microsoft#100346 merge single resource
1 parent 97bf8e1 commit 04aa49c

4 files changed

Lines changed: 16 additions & 19 deletions

File tree

src/vs/platform/userDataSync/common/userDataSync.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,10 @@ export interface ISyncTask {
369369
export interface IManualSyncTask {
370370
readonly manifest: IUserDataManifest | null;
371371
preview(): Promise<[SyncResource, ISyncResourcePreview][]>;
372-
merge(): Promise<[SyncResource, ISyncResourcePreview][]>;
372+
accept(uri: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]>;
373+
merge(uri: URI): Promise<[SyncResource, ISyncResourcePreview][]>;
373374
pull(): Promise<void>;
374375
push(): Promise<void>;
375-
accept(uri: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]>;
376376
stop(): Promise<void>;
377377
}
378378

src/vs/platform/userDataSync/common/userDataSyncIpc.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class ManualSyncTaskChannel implements IServerChannel {
8686
switch (command) {
8787
case 'preview': return this.manualSyncTask.preview();
8888
case 'accept': return this.manualSyncTask.accept(URI.revive(args[0]), args[1]);
89-
case 'merge': return this.manualSyncTask.merge();
89+
case 'merge': return this.manualSyncTask.merge(URI.revive(args[0]));
9090
case 'pull': return this.manualSyncTask.pull();
9191
case 'push': return this.manualSyncTask.push();
9292
case 'stop': return this.manualSyncTask.stop();

src/vs/platform/userDataSync/common/userDataSyncService.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -490,22 +490,19 @@ class ManualSyncTask implements IManualSyncTask {
490490
return this.previews;
491491
}
492492

493-
async merge(): Promise<[SyncResource, ISyncResourcePreview][]> {
493+
async merge(resource: URI): Promise<[SyncResource, ISyncResourcePreview][]> {
494494
if (!this.previews) {
495495
throw new Error('You need to create preview before applying');
496496
}
497-
const previews: [SyncResource, ISyncResourcePreview][] = [];
498-
for (const [syncResource, preview] of this.previews) {
499-
const synchroniser = this.synchronisers.find(s => s.resource === syncResource)!;
500-
let newPreview: ISyncResourcePreview | null = null;
501-
for (const resourcePreview of preview.resourcePreviews) {
502-
newPreview = await synchroniser.merge(resourcePreview.previewResource, false, this.syncHeaders);
503-
}
504-
if (newPreview) {
505-
previews.push(this.toSyncResourcePreview(syncResource, newPreview));
506-
}
497+
const index = this.previews.findIndex(([, preview]) => preview.resourcePreviews.some(({ localResource, previewResource, remoteResource }) =>
498+
isEqual(resource, localResource) || isEqual(resource, previewResource) || isEqual(resource, remoteResource)));
499+
if (index !== -1) {
500+
const synchroniser = this.synchronisers.find(s => s.resource === this.previews![index][0])!;
501+
/* force only if the resource is local or remote resource */
502+
const force = this.previews![index][1].resourcePreviews.some(({ localResource, remoteResource }) => isEqual(resource, localResource) || isEqual(resource, remoteResource));
503+
const preview = await synchroniser.merge(resource, force, this.syncHeaders);
504+
preview ? this.previews.splice(index, 1, this.toSyncResourcePreview(synchroniser.resource, preview)) : this.previews.splice(index, 1);
507505
}
508-
this.previews = previews;
509506
return this.previews;
510507
}
511508

src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,12 @@ class ManualSyncTask implements IManualSyncTask {
181181
]));
182182
}
183183

184-
accept(uri: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]> {
185-
return this.channel.call('accept', [uri, content]);
184+
accept(resource: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]> {
185+
return this.channel.call('accept', [resource, content]);
186186
}
187187

188-
merge(): Promise<[SyncResource, ISyncResourcePreview][]> {
189-
return this.channel.call('merge');
188+
merge(resource: URI): Promise<[SyncResource, ISyncResourcePreview][]> {
189+
return this.channel.call('merge', [resource]);
190190
}
191191

192192
pull(): Promise<void> {

0 commit comments

Comments
 (0)