Skip to content

Commit aa930e5

Browse files
committed
microsoft#100346 reset preview folder when sync is completed
1 parent b79adfe commit aa930e5

2 files changed

Lines changed: 10 additions & 39 deletions

File tree

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

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ export abstract class AbstractSynchroniser extends Disposable {
7979
private _onDidChangStatus: Emitter<SyncStatus> = this._register(new Emitter<SyncStatus>());
8080
readonly onDidChangeStatus: Event<SyncStatus> = this._onDidChangStatus.event;
8181

82-
private _resourcePreviews: IResourcePreview[] = [];
83-
8482
private _conflicts: IResourcePreview[] = [];
8583
get conflicts(): IResourcePreview[] { return this._conflicts; }
8684
private _onDidChangeConflicts: Emitter<IResourcePreview[]> = this._register(new Emitter<IResourcePreview[]>());
@@ -382,18 +380,8 @@ export abstract class AbstractSynchroniser extends Disposable {
382380

383381
try {
384382
this.syncHeaders = { ...headers };
385-
386383
const preview = await this.syncPreviewPromise;
387-
this.syncPreviewPromise = createCancelablePromise(async token => {
388-
const newPreview = await this.updateSyncResourcePreviewContent(preview, resource, content, token);
389-
390-
if (!token.isCancellationRequested) {
391-
await this.updateResourcePreviews(newPreview.resourcePreviews, token);
392-
}
393-
394-
return newPreview;
395-
});
396-
384+
this.syncPreviewPromise = createCancelablePromise(token => this.updateSyncResourcePreviewContent(preview, resource, content, token));
397385
return this.merge(resource, force, headers);
398386
} finally {
399387
this.syncHeaders = {};
@@ -456,8 +444,8 @@ export abstract class AbstractSynchroniser extends Disposable {
456444
// reset preview
457445
this.syncPreviewPromise = null;
458446

459-
// reset resource previews
460-
await this.updateResourcePreviews([], CancellationToken.None);
447+
// reset preview folder
448+
await this.clearPreviewFolder();
461449

462450
return SyncStatus.Idle;
463451
}
@@ -488,18 +476,10 @@ export abstract class AbstractSynchroniser extends Disposable {
488476
};
489477
}
490478

491-
private async updateResourcePreviews(resourcePreviews: IResourcePreview[], token: CancellationToken): Promise<void> {
492-
const oldPreviews = this._resourcePreviews;
493-
this._resourcePreviews = resourcePreviews;
494-
495-
// clear obsolete previews
496-
for (const resourcePreview of oldPreviews) {
497-
if (!this._resourcePreviews.some(({ previewResource }) => isEqual(previewResource, resourcePreview.previewResource))) {
498-
try {
499-
await this.fileService.del(resourcePreview.previewResource);
500-
} catch (error) { /* Ignore */ }
501-
}
502-
}
479+
private async clearPreviewFolder(): Promise<void> {
480+
try {
481+
await this.fileService.del(this.syncPreviewFolder, { recursive: true });
482+
} catch (error) { /* Ignore */ }
503483
}
504484

505485
private updateConflicts(conflicts: IResourcePreview[]): void {
@@ -588,10 +568,6 @@ export abstract class AbstractSynchroniser extends Disposable {
588568
const lastSyncUserDataForPreview = lastSyncUserData === null && isLastSyncFromCurrentMachine ? remoteUserData : lastSyncUserData;
589569
const resourcePreviews = await this.generateSyncPreview(remoteUserData, lastSyncUserDataForPreview, token);
590570

591-
if (!token.isCancellationRequested) {
592-
await this.updateResourcePreviews(resourcePreviews, token);
593-
}
594-
595571
return { remoteUserData, lastSyncUserData, resourcePreviews, isLastSyncFromCurrentMachine };
596572
}
597573

@@ -678,8 +654,8 @@ export abstract class AbstractSynchroniser extends Disposable {
678654
this.syncPreviewPromise = null;
679655
}
680656

681-
await this.updateResourcePreviews([], CancellationToken.None);
682657
this.updateConflicts([]);
658+
await this.clearPreviewFolder();
683659

684660
this.setStatus(SyncStatus.Idle);
685661
this.logService.info(`${this.syncResourceLogLabel}: Stopped synchronizing ${this.resource.toLowerCase()}.`);

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { IFileService } from 'vs/platform/files/common/files';
1212
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
1313
import { VSBuffer } from 'vs/base/common/buffer';
1414
import { SnippetsSynchroniser } from 'vs/platform/userDataSync/common/snippetsSync';
15-
import { joinPath } from 'vs/base/common/resources';
15+
import { joinPath, dirname } from 'vs/base/common/resources';
1616
import { IStringDictionary } from 'vs/base/common/collections';
1717
import { URI } from 'vs/base/common/uri';
1818

@@ -291,8 +291,6 @@ suite('SnippetsSync', () => {
291291

292292
assert.equal(testObject.status, SyncStatus.Idle);
293293
assert.deepEqual(testObject.conflicts, []);
294-
const fileService = testClient.instantiationService.get(IFileService);
295-
assert.ok(!await fileService.exists(conflicts[0].previewResource));
296294

297295
const actual1 = await readSnippet('html.json', testClient);
298296
assert.equal(actual1, htmlSnippet1);
@@ -353,9 +351,6 @@ suite('SnippetsSync', () => {
353351

354352
assert.equal(testObject.status, SyncStatus.Idle);
355353
assert.deepEqual(testObject.conflicts, []);
356-
const fileService = testClient.instantiationService.get(IFileService);
357-
assert.ok(!await fileService.exists(conflicts[0].previewResource));
358-
assert.ok(!await fileService.exists(conflicts[1].previewResource));
359354

360355
const actual1 = await readSnippet('html.json', testClient);
361356
assert.equal(actual1, htmlSnippet2);
@@ -697,7 +692,7 @@ suite('SnippetsSync', () => {
697692
await testObject.acceptPreviewContent(conflicts[0].previewResource, htmlSnippet2, false);
698693

699694
const fileService = testClient.instantiationService.get(IFileService);
700-
assert.ok(fileService.exists(conflicts[0].previewResource));
695+
assert.ok(!await fileService.exists(dirname(conflicts[0].previewResource)));
701696
});
702697

703698
function parseSnippets(content: string): IStringDictionary<string> {

0 commit comments

Comments
 (0)