Skip to content

Commit b8405ce

Browse files
committed
1 parent eb1ca26 commit b8405ce

13 files changed

Lines changed: 59 additions & 30 deletions

File tree

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ export abstract class AbstractSynchroniser extends Disposable {
384384
}
385385
}
386386

387-
async accept(resource: URI, content: string): Promise<ISyncResourcePreview | null> {
387+
async accept(resource: URI, content: string | null): Promise<ISyncResourcePreview | null> {
388388
await this.updateSyncResourcePreview(resource, async (resourcePreview) => {
389389
const updatedResourcePreview = await this.updateResourcePreview(resourcePreview, resource, content);
390390
return {
@@ -397,7 +397,7 @@ export abstract class AbstractSynchroniser extends Disposable {
397397

398398
async merge(resource: URI): Promise<ISyncResourcePreview | null> {
399399
await this.updateSyncResourcePreview(resource, async (resourcePreview) => {
400-
const updatedResourcePreview = await this.updateResourcePreview(resourcePreview, resourcePreview.previewResource, resourcePreview.previewContent || '');
400+
const updatedResourcePreview = await this.updateResourcePreview(resourcePreview, resourcePreview.previewResource, resourcePreview.previewContent);
401401
return {
402402
...updatedResourcePreview,
403403
mergeState: resourcePreview.hasConflicts ? MergeState.Conflict : MergeState.Accepted
@@ -409,7 +409,7 @@ export abstract class AbstractSynchroniser extends Disposable {
409409
async discard(resource: URI): Promise<ISyncResourcePreview | null> {
410410
await this.updateSyncResourcePreview(resource, async (resourcePreview) => {
411411
await this.fileService.writeFile(resourcePreview.previewResource, VSBuffer.fromString(resourcePreview.previewContent || ''));
412-
const updatedResourcePreview = await this.updateResourcePreview(resourcePreview, resourcePreview.previewResource, resourcePreview.previewContent || '');
412+
const updatedResourcePreview = await this.updateResourcePreview(resourcePreview, resourcePreview.previewResource, resourcePreview.previewContent);
413413
return {
414414
...updatedResourcePreview,
415415
mergeState: MergeState.Preview
@@ -448,7 +448,7 @@ export abstract class AbstractSynchroniser extends Disposable {
448448
}
449449
}
450450

451-
protected async updateResourcePreview(resourcePreview: IResourcePreview, resource: URI, acceptedContent: string): Promise<IResourcePreview> {
451+
protected async updateResourcePreview(resourcePreview: IResourcePreview, resource: URI, acceptedContent: string | null): Promise<IResourcePreview> {
452452
return {
453453
...resourcePreview,
454454
acceptedContent
@@ -550,13 +550,13 @@ export abstract class AbstractSynchroniser extends Disposable {
550550
if (syncPreview) {
551551
for (const resourcePreview of syncPreview.resourcePreviews) {
552552
if (isEqual(resourcePreview.acceptedResource, uri)) {
553-
return resourcePreview.acceptedContent || '';
553+
return resourcePreview.acceptedContent;
554554
}
555555
if (isEqual(resourcePreview.remoteResource, uri)) {
556-
return resourcePreview.remoteContent || '';
556+
return resourcePreview.remoteContent;
557557
}
558558
if (isEqual(resourcePreview.localResource, uri)) {
559-
return resourcePreview.localContent || '';
559+
return resourcePreview.localContent;
560560
}
561561
}
562562
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ export class ExtensionsSynchroniser extends AbstractSynchroniser implements IUse
183183
}
184184
}
185185

186-
protected async updateResourcePreview(resourcePreview: IExtensionResourcePreview, resource: URI, acceptedContent: string): Promise<IExtensionResourcePreview> {
186+
protected async updateResourcePreview(resourcePreview: IExtensionResourcePreview, resource: URI, acceptedContent: string | null): Promise<IExtensionResourcePreview> {
187187
if (isEqual(resource, this.localResource)) {
188188
const remoteExtensions = resourcePreview.remoteContent ? JSON.parse(resourcePreview.remoteContent) : null;
189189
return this.getPushPreview(remoteExtensions);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ export class GlobalStateSynchroniser extends AbstractSynchroniser implements IUs
178178
}
179179
}
180180

181-
protected async updateResourcePreview(resourcePreview: IGlobalStateResourcePreview, resource: URI, acceptedContent: string): Promise<IGlobalStateResourcePreview> {
181+
protected async updateResourcePreview(resourcePreview: IGlobalStateResourcePreview, resource: URI, acceptedContent: string | null): Promise<IGlobalStateResourcePreview> {
182182
if (isEqual(this.localResource, resource)) {
183183
return this.getPushPreview(resourcePreview.remoteContent);
184184
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,8 @@ export class SettingsSynchroniser extends AbstractJsonFileSynchroniser implement
199199
}];
200200
}
201201

202-
protected async updateResourcePreview(resourcePreview: IFileResourcePreview, resource: URI, acceptedContent: string): Promise<IFileResourcePreview> {
203-
if (acceptedContent && isEqual(resource, this.previewResource) || isEqual(resource, this.remoteResource)) {
202+
protected async updateResourcePreview(resourcePreview: IFileResourcePreview, resource: URI, acceptedContent: string | null): Promise<IFileResourcePreview> {
203+
if (acceptedContent && (isEqual(resource, this.previewResource) || isEqual(resource, this.remoteResource))) {
204204
const formatUtils = await this.getFormattingOptions();
205205
// Add ignored settings from local file content
206206
const ignoredSettings = await this.getIgnoredSettings();

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,12 @@ export class SnippetsSynchroniser extends AbstractSynchroniser implements IUserD
9696
return this.getResourcePreviews(mergeResult, local, remoteSnippets || {});
9797
}
9898

99-
protected async updateResourcePreview(resourcePreview: IFileResourcePreview, resource: URI, acceptedContent: string): Promise<IFileResourcePreview> {
99+
protected async updateResourcePreview(resourcePreview: IFileResourcePreview, resource: URI, acceptedContent: string | null): Promise<IFileResourcePreview> {
100100
return {
101101
...resourcePreview,
102-
acceptedContent: acceptedContent || null,
103-
localChange: this.computeLocalChange(resourcePreview, resource, acceptedContent || null),
104-
remoteChange: this.computeRemoteChange(resourcePreview, resource, acceptedContent || null),
102+
acceptedContent,
103+
localChange: this.computeLocalChange(resourcePreview, resource, acceptedContent),
104+
remoteChange: this.computeRemoteChange(resourcePreview, resource, acceptedContent),
105105
};
106106
}
107107

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ export interface IUserDataSynchroniser {
360360
stop(): Promise<void>;
361361

362362
preview(manifest: IUserDataManifest | null, headers: IHeaders): Promise<ISyncResourcePreview | null>;
363-
accept(resource: URI, content: string): Promise<ISyncResourcePreview | null>;
363+
accept(resource: URI, content: string | null): Promise<ISyncResourcePreview | null>;
364364
merge(resource: URI): Promise<ISyncResourcePreview | null>;
365365
discard(resource: URI): Promise<ISyncResourcePreview | null>;
366366
apply(force: boolean, headers: IHeaders): Promise<ISyncResourcePreview | null>;
@@ -400,7 +400,7 @@ export interface IManualSyncTask extends IDisposable {
400400
readonly manifest: IUserDataManifest | null;
401401
readonly onSynchronizeResources: Event<[SyncResource, URI[]][]>;
402402
preview(): Promise<[SyncResource, ISyncResourcePreview][]>;
403-
accept(resource: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]>;
403+
accept(resource: URI, content: string | null): Promise<[SyncResource, ISyncResourcePreview][]>;
404404
merge(resource: URI): Promise<[SyncResource, ISyncResourcePreview][]>;
405405
discard(resource: URI): Promise<[SyncResource, ISyncResourcePreview][]>;
406406
apply(): Promise<[SyncResource, ISyncResourcePreview][]>;
@@ -437,7 +437,7 @@ export interface IUserDataSyncService {
437437
hasLocalData(): Promise<boolean>;
438438
hasPreviouslySynced(): Promise<boolean>;
439439
resolveContent(resource: URI): Promise<string | null>;
440-
accept(resource: SyncResource, conflictResource: URI, content: string, apply: boolean): Promise<void>;
440+
accept(resource: SyncResource, conflictResource: URI, content: string | null, apply: boolean): Promise<void>;
441441

442442
getLocalSyncResourceHandles(resource: SyncResource): Promise<ISyncResourceHandle[]>;
443443
getRemoteSyncResourceHandles(resource: SyncResource): Promise<ISyncResourceHandle[]>;

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,18 @@ export class UserDataSyncChannel implements IServerChannel {
6565

6666
private async createManualSyncTask(): Promise<{ id: string, manifest: IUserDataManifest | null }> {
6767
const manualSyncTask = await this.service.createManualSyncTask();
68-
const manualSyncTaskChannel = new ManualSyncTaskChannel(manualSyncTask);
68+
const manualSyncTaskChannel = new ManualSyncTaskChannel(manualSyncTask, this.logService);
6969
this.server.registerChannel(`manualSyncTask-${manualSyncTask.id}`, manualSyncTaskChannel);
7070
return { id: manualSyncTask.id, manifest: manualSyncTask.manifest };
7171
}
7272
}
7373

7474
class ManualSyncTaskChannel implements IServerChannel {
7575

76-
constructor(private readonly manualSyncTask: IManualSyncTask) { }
76+
constructor(
77+
private readonly manualSyncTask: IManualSyncTask,
78+
private readonly logService: ILogService
79+
) { }
7780

7881
listen(_: unknown, event: string): Event<any> {
7982
switch (event) {
@@ -83,6 +86,16 @@ class ManualSyncTaskChannel implements IServerChannel {
8386
}
8487

8588
async call(context: any, command: string, args?: any): Promise<any> {
89+
try {
90+
const result = await this._call(context, command, args);
91+
return result;
92+
} catch (e) {
93+
this.logService.error(e);
94+
throw e;
95+
}
96+
}
97+
98+
private async _call(context: any, command: string, args?: any): Promise<any> {
8699
switch (command) {
87100
case 'preview': return this.manualSyncTask.preview();
88101
case 'accept': return this.manualSyncTask.accept(URI.revive(args[0]), args[1]);

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
256256
}
257257
}
258258

259-
async accept(syncResource: SyncResource, resource: URI, content: string, apply: boolean): Promise<void> {
259+
async accept(syncResource: SyncResource, resource: URI, content: string | null, apply: boolean): Promise<void> {
260260
await this.checkEnablement();
261261
const synchroniser = this.getSynchroniser(syncResource);
262262
await synchroniser.accept(resource, content);
@@ -456,7 +456,7 @@ class ManualSyncTask extends Disposable implements IManualSyncTask {
456456
return this.previews;
457457
}
458458

459-
async accept(resource: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]> {
459+
async accept(resource: URI, content: string | null): Promise<[SyncResource, ISyncResourcePreview][]> {
460460
return this.performAction(resource, sychronizer => sychronizer.accept(resource, content));
461461
}
462462

@@ -555,7 +555,7 @@ class ManualSyncTask extends Disposable implements IManualSyncTask {
555555
this._onSynchronizeResources.fire(this.synchronizingResources);
556556
const synchroniser = this.synchronisers.find(s => s.resource === syncResource)!;
557557
for (const resourcePreview of preview.resourcePreviews) {
558-
const content = await synchroniser.resolveContent(resourcePreview.remoteResource) || '';
558+
const content = await synchroniser.resolveContent(resourcePreview.remoteResource);
559559
await synchroniser.accept(resourcePreview.remoteResource, content);
560560
}
561561
await synchroniser.apply(true, this.syncHeaders);
@@ -577,7 +577,7 @@ class ManualSyncTask extends Disposable implements IManualSyncTask {
577577
this._onSynchronizeResources.fire(this.synchronizingResources);
578578
const synchroniser = this.synchronisers.find(s => s.resource === syncResource)!;
579579
for (const resourcePreview of preview.resourcePreviews) {
580-
const content = await synchroniser.resolveContent(resourcePreview.localResource) || '';
580+
const content = await synchroniser.resolveContent(resourcePreview.localResource);
581581
await synchroniser.accept(resourcePreview.localResource, content);
582582
}
583583
await synchroniser.apply(true, this.syncHeaders);

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,20 @@ suite('KeybindingsSync', () => {
8383
assert.equal(testObject.getKeybindingsContentFromSyncContent(lastSyncUserData!.syncData!.content!), '[]');
8484
});
8585

86+
test('test apply remote when keybindings file does not exist', async () => {
87+
const fileService = client.instantiationService.get(IFileService);
88+
const keybindingsResource = client.instantiationService.get(IEnvironmentService).keybindingsResource;
89+
if (await fileService.exists(keybindingsResource)) {
90+
await fileService.del(keybindingsResource);
91+
}
92+
93+
const preview = (await testObject.preview(await client.manifest()))!;
94+
95+
server.reset();
96+
const content = await testObject.resolveContent(preview.resourcePreviews[0].remoteResource);
97+
await testObject.accept(preview.resourcePreviews[0].remoteResource, content);
98+
await testObject.apply(false);
99+
assert.deepEqual(server.requests, []);
100+
});
101+
86102
});

src/vs/workbench/contrib/userDataSync/browser/userDataManualSyncView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,15 +252,15 @@ export class UserDataManualSyncViewPane extends TreeViewPane {
252252
private async acceptLocal(userDataSyncResource: IUserDataSyncResource): Promise<void> {
253253
await this.withProgress(async () => {
254254
const content = await this.userDataSyncService.resolveContent(userDataSyncResource.local);
255-
await this.userDataSyncPreview.accept(userDataSyncResource.syncResource, userDataSyncResource.local, content || '');
255+
await this.userDataSyncPreview.accept(userDataSyncResource.syncResource, userDataSyncResource.local, content);
256256
});
257257
await this.reopen(userDataSyncResource);
258258
}
259259

260260
private async acceptRemote(userDataSyncResource: IUserDataSyncResource): Promise<void> {
261261
await this.withProgress(async () => {
262262
const content = await this.userDataSyncService.resolveContent(userDataSyncResource.remote);
263-
await this.userDataSyncPreview.accept(userDataSyncResource.syncResource, userDataSyncResource.remote, content || '');
263+
await this.userDataSyncPreview.accept(userDataSyncResource.syncResource, userDataSyncResource.remote, content);
264264
});
265265
await this.reopen(userDataSyncResource);
266266
}

0 commit comments

Comments
 (0)