mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-31 03:07:50 +01:00
clean up: do not use settings sync store in settings (#187006)
* clean up: do not use settings sync store in settings * fix tests
This commit is contained in:
@@ -18,9 +18,8 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity';
|
||||
import { IUserDataProfile, IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile';
|
||||
import { AbstractInitializer, AbstractJsonFileSynchroniser, IAcceptResult, IFileResourcePreview, IMergeResult } from 'vs/platform/userDataSync/common/abstractSynchronizer';
|
||||
import { edit } from 'vs/platform/userDataSync/common/content';
|
||||
import { getIgnoredSettings, isEmpty, merge, updateIgnoredSettings } from 'vs/platform/userDataSync/common/settingsMerge';
|
||||
import { Change, CONFIGURATION_SYNC_STORE_KEY, IRemoteUserData, IUserDataSyncBackupStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, IUserDataSyncUtilService, SyncResource, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_CONFIGURATION_SCOPE, USER_DATA_SYNC_SCHEME, IUserDataResourceManifest } from 'vs/platform/userDataSync/common/userDataSync';
|
||||
import { Change, IRemoteUserData, IUserDataSyncBackupStoreService, IUserDataSyncConfiguration, IUserDataSynchroniser, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncStoreService, IUserDataSyncUtilService, SyncResource, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_CONFIGURATION_SCOPE, USER_DATA_SYNC_SCHEME, IUserDataResourceManifest } from 'vs/platform/userDataSync/common/userDataSync';
|
||||
|
||||
interface ISettingsResourcePreview extends IFileResourcePreview {
|
||||
previewResult: IMergeResult;
|
||||
@@ -267,9 +266,7 @@ export class SettingsSynchroniser extends AbstractJsonFileSynchroniser implement
|
||||
try {
|
||||
const localFileContent = await this.getLocalFileContent();
|
||||
if (localFileContent) {
|
||||
const formatUtils = await this.getFormattingOptions();
|
||||
const content = edit(localFileContent.value.toString(), [CONFIGURATION_SYNC_STORE_KEY], undefined, formatUtils);
|
||||
return !isEmpty(content);
|
||||
return !isEmpty(localFileContent.value.toString());
|
||||
}
|
||||
} catch (error) {
|
||||
if ((<FileOperationError>error).fileOperationResult !== FileOperationResult.FILE_NOT_FOUND) {
|
||||
|
||||
@@ -23,8 +23,6 @@ import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile';
|
||||
|
||||
export const CONFIGURATION_SYNC_STORE_KEY = 'configurationSync.store';
|
||||
|
||||
export function getDisallowedIgnoredSettings(): string[] {
|
||||
const allSettings = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration).getConfigurationProperties();
|
||||
return Object.keys(allSettings).filter(setting => !!allSettings[setting].disallowSyncIgnore);
|
||||
@@ -35,7 +33,7 @@ export function getDefaultIgnoredSettings(): string[] {
|
||||
const ignoreSyncSettings = Object.keys(allSettings).filter(setting => !!allSettings[setting].ignoreSync);
|
||||
const machineSettings = Object.keys(allSettings).filter(setting => allSettings[setting].scope === ConfigurationScope.MACHINE || allSettings[setting].scope === ConfigurationScope.MACHINE_OVERRIDABLE);
|
||||
const disallowedSettings = getDisallowedIgnoredSettings();
|
||||
return distinct([CONFIGURATION_SYNC_STORE_KEY, ...ignoreSyncSettings, ...machineSettings, ...disallowedSettings]);
|
||||
return distinct([...ignoreSyncSettings, ...machineSettings, ...disallowedSettings]);
|
||||
}
|
||||
|
||||
export const USER_DATA_SYNC_CONFIGURATION_SCOPE = 'settingsSync';
|
||||
@@ -94,7 +92,7 @@ export function registerConfiguration(): IDisposable {
|
||||
const jsonRegistry = Registry.as<IJSONContributionRegistry>(JSONExtensions.JSONContribution);
|
||||
const registerIgnoredSettingsSchema = () => {
|
||||
const disallowedIgnoredSettings = getDisallowedIgnoredSettings();
|
||||
const defaultIgnoredSettings = getDefaultIgnoredSettings().filter(s => s !== CONFIGURATION_SYNC_STORE_KEY);
|
||||
const defaultIgnoredSettings = getDefaultIgnoredSettings();
|
||||
const settings = Object.keys(allSettings.properties).filter(setting => !defaultIgnoredSettings.includes(setting));
|
||||
const ignoredSettings = defaultIgnoredSettings.filter(setting => !disallowedIgnoredSettings.includes(setting));
|
||||
const ignoredSettingsSchema: IJSONSchema = {
|
||||
|
||||
@@ -23,8 +23,9 @@ import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { asJson, asText, asTextOrError, IRequestService, isSuccess as isSuccessContext } from 'vs/platform/request/common/request';
|
||||
import { getServiceMachineId } from 'vs/platform/externalServices/common/serviceMachineId';
|
||||
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||
import { CONFIGURATION_SYNC_STORE_KEY, HEADER_EXECUTION_ID, HEADER_OPERATION_ID, IAuthenticationProvider, IResourceRefHandle, IUserData, IUserDataManifest, IUserDataSyncLogService, IUserDataSyncStore, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, ServerResource, SYNC_SERVICE_URL_TYPE, UserDataSyncErrorCode, UserDataSyncStoreError, UserDataSyncStoreType } from 'vs/platform/userDataSync/common/userDataSync';
|
||||
import { HEADER_EXECUTION_ID, HEADER_OPERATION_ID, IAuthenticationProvider, IResourceRefHandle, IUserData, IUserDataManifest, IUserDataSyncLogService, IUserDataSyncStore, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, ServerResource, SYNC_SERVICE_URL_TYPE, UserDataSyncErrorCode, UserDataSyncStoreError, UserDataSyncStoreType } from 'vs/platform/userDataSync/common/userDataSync';
|
||||
|
||||
const CONFIGURATION_SYNC_STORE_KEY = 'configurationSync.store';
|
||||
const SYNC_PREVIOUS_STORE = 'sync.previous.store';
|
||||
const DONOT_MAKE_REQUESTS_UNTIL_KEY = 'sync.donot-make-requests-until';
|
||||
const USER_SESSION_ID_KEY = 'sync.user-session-id';
|
||||
@@ -61,27 +62,27 @@ export abstract class AbstractUserDataSyncStoreManagementService extends Disposa
|
||||
}
|
||||
|
||||
protected updateUserDataSyncStore(): void {
|
||||
this._userDataSyncStore = this.toUserDataSyncStore(this.productService[CONFIGURATION_SYNC_STORE_KEY], this.configurationService.getValue<ConfigurationSyncStore>(CONFIGURATION_SYNC_STORE_KEY));
|
||||
this._userDataSyncStore = this.toUserDataSyncStore(this.productService[CONFIGURATION_SYNC_STORE_KEY]);
|
||||
this._onDidChangeUserDataSyncStore.fire();
|
||||
}
|
||||
|
||||
protected toUserDataSyncStore(productStore: ConfigurationSyncStore & { web?: ConfigurationSyncStore } | undefined, configuredStore?: ConfigurationSyncStore): UserDataSyncStore | undefined {
|
||||
protected toUserDataSyncStore(configurationSyncStore: ConfigurationSyncStore & { web?: ConfigurationSyncStore } | undefined): UserDataSyncStore | undefined {
|
||||
if (!configurationSyncStore) {
|
||||
return undefined;
|
||||
}
|
||||
// Check for web overrides for backward compatibility while reading previous store
|
||||
productStore = isWeb && productStore?.web ? { ...productStore, ...productStore.web } : productStore;
|
||||
const value: Partial<ConfigurationSyncStore> = { ...(productStore || {}), ...(configuredStore || {}) };
|
||||
if (value
|
||||
&& isString(value.url)
|
||||
&& isObject(value.authenticationProviders)
|
||||
&& Object.keys(value.authenticationProviders).every(authenticationProviderId => Array.isArray(value!.authenticationProviders![authenticationProviderId].scopes))
|
||||
configurationSyncStore = isWeb && configurationSyncStore.web ? { ...configurationSyncStore, ...configurationSyncStore.web } : configurationSyncStore;
|
||||
if (isString(configurationSyncStore.url)
|
||||
&& isObject(configurationSyncStore.authenticationProviders)
|
||||
&& Object.keys(configurationSyncStore.authenticationProviders).every(authenticationProviderId => Array.isArray(configurationSyncStore!.authenticationProviders![authenticationProviderId].scopes))
|
||||
) {
|
||||
const syncStore = value as ConfigurationSyncStore;
|
||||
const canSwitch = !!syncStore.canSwitch && !configuredStore?.url;
|
||||
const syncStore = configurationSyncStore as ConfigurationSyncStore;
|
||||
const canSwitch = !!syncStore.canSwitch;
|
||||
const defaultType: UserDataSyncStoreType = syncStore.url === syncStore.insidersUrl ? 'insiders' : 'stable';
|
||||
const type: UserDataSyncStoreType = (canSwitch ? this.userDataSyncStoreType : undefined) || defaultType;
|
||||
const url = configuredStore?.url ||
|
||||
(type === 'insiders' ? syncStore.insidersUrl
|
||||
: type === 'stable' ? syncStore.stableUrl
|
||||
: syncStore.url);
|
||||
const url = type === 'insiders' ? syncStore.insidersUrl
|
||||
: type === 'stable' ? syncStore.stableUrl
|
||||
: syncStore.url;
|
||||
return {
|
||||
url: URI.parse(url),
|
||||
type,
|
||||
|
||||
@@ -5,71 +5,19 @@
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { timeout } from 'vs/base/common/async';
|
||||
import { newWriteableBufferStream, VSBuffer } from 'vs/base/common/buffer';
|
||||
import { newWriteableBufferStream } from 'vs/base/common/buffer';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { isWeb } from 'vs/base/common/platform';
|
||||
import { ConfigurationSyncStore } from 'vs/base/common/product';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IFileService } from 'vs/platform/files/common/files';
|
||||
import { NullLogService } from 'vs/platform/log/common/log';
|
||||
import product from 'vs/platform/product/common/product';
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { IRequestService } from 'vs/platform/request/common/request';
|
||||
import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile';
|
||||
import { IUserDataSyncStore, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, SyncResource, UserDataSyncErrorCode, UserDataSyncStoreError } from 'vs/platform/userDataSync/common/userDataSync';
|
||||
import { RequestsSession, UserDataSyncStoreManagementService, UserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSyncStoreService';
|
||||
import { IUserDataSyncStoreService, SyncResource, UserDataSyncErrorCode, UserDataSyncStoreError } from 'vs/platform/userDataSync/common/userDataSync';
|
||||
import { RequestsSession, UserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSyncStoreService';
|
||||
import { UserDataSyncClient, UserDataSyncTestServer } from 'vs/platform/userDataSync/test/common/userDataSyncClient';
|
||||
|
||||
suite('UserDataSyncStoreManagementService', () => {
|
||||
const disposableStore = new DisposableStore();
|
||||
|
||||
teardown(() => disposableStore.clear());
|
||||
|
||||
test('test sync store is read from settings', async () => {
|
||||
const client = disposableStore.add(new UserDataSyncClient(new UserDataSyncTestServer()));
|
||||
await client.setUp();
|
||||
|
||||
client.instantiationService.stub(IProductService, {
|
||||
_serviceBrand: undefined, ...product, ...{
|
||||
'configurationSync.store': undefined
|
||||
}
|
||||
});
|
||||
|
||||
const configuredStore: ConfigurationSyncStore = {
|
||||
url: 'http://configureHost:3000',
|
||||
stableUrl: 'http://configureHost:3000',
|
||||
insidersUrl: 'http://configureHost:3000',
|
||||
canSwitch: false,
|
||||
authenticationProviders: { 'configuredAuthProvider': { scopes: [] } }
|
||||
};
|
||||
await client.instantiationService.get(IFileService).writeFile(client.instantiationService.get(IUserDataProfilesService).defaultProfile.settingsResource, VSBuffer.fromString(JSON.stringify({
|
||||
'configurationSync.store': configuredStore
|
||||
})));
|
||||
await client.instantiationService.get(IConfigurationService).reloadConfiguration();
|
||||
|
||||
const expected: IUserDataSyncStore = {
|
||||
url: URI.parse('http://configureHost:3000'),
|
||||
type: 'stable',
|
||||
defaultUrl: URI.parse('http://configureHost:3000'),
|
||||
stableUrl: URI.parse('http://configureHost:3000'),
|
||||
insidersUrl: URI.parse('http://configureHost:3000'),
|
||||
canSwitch: false,
|
||||
authenticationProviders: [{ id: 'configuredAuthProvider', scopes: [] }]
|
||||
};
|
||||
|
||||
const testObject: IUserDataSyncStoreManagementService = disposableStore.add(client.instantiationService.createInstance(UserDataSyncStoreManagementService));
|
||||
|
||||
assert.strictEqual(testObject.userDataSyncStore?.url.toString(), expected.url.toString());
|
||||
assert.strictEqual(testObject.userDataSyncStore?.defaultUrl.toString(), expected.defaultUrl.toString());
|
||||
assert.deepStrictEqual(testObject.userDataSyncStore?.authenticationProviders, expected.authenticationProviders);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
suite('UserDataSyncStoreService', () => {
|
||||
|
||||
const disposableStore = new DisposableStore();
|
||||
|
||||
Reference in New Issue
Block a user