Skip to content

Commit f1150d6

Browse files
committed
UserDataFileProvider for handling user data resources
1 parent 8964003 commit f1150d6

34 files changed

Lines changed: 199 additions & 71 deletions

File tree

src/vs/base/common/network.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,6 @@ export namespace Schemas {
4646
export const command: string = 'command';
4747

4848
export const vscodeRemote: string = 'vscode-remote';
49+
50+
export const userData: string = 'vscode-userdata';
4951
}

src/vs/base/test/node/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ export interface ITestFileResult {
1616
export function testFile(folder: string, file: string): Promise<ITestFileResult> {
1717
const id = generateUuid();
1818
const parentDir = join(tmpdir(), 'vsctests', id);
19-
const newDir = join(parentDir, 'config', id);
20-
const testFile = join(newDir, 'config.json');
19+
const newDir = join(parentDir, folder, id);
20+
const testFile = join(newDir, file);
2121

2222
return mkdirp(newDir, 493).then(() => {
2323
return {

src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ async function main(server: Server, initData: ISharedProcessInitData, configurat
9898
disposables.push(logService);
9999
logService.info('main', JSON.stringify(configuration));
100100

101-
const configurationService = new ConfigurationService(environmentService.settingsResource);
101+
const configurationService = new ConfigurationService(environmentService.appSettingsHome);
102102
disposables.push(configurationService);
103103
await configurationService.initialize();
104104

src/vs/code/electron-main/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class CodeMain {
142142
process.once('exit', () => logService.dispose());
143143
services.set(ILogService, logService);
144144

145-
services.set(IConfigurationService, new ConfigurationService(environmentService.settingsResource));
145+
services.set(IConfigurationService, new ConfigurationService(environmentService.appSettingsHome));
146146
services.set(ILifecycleService, new SyncDescriptor(LifecycleService));
147147
services.set(IStateService, new SyncDescriptor(StateService));
148148
services.set(IRequestService, new SyncDescriptor(RequestService));

src/vs/code/node/cliProcessMain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ export async function main(argv: ParsedArgs): Promise<void> {
285285

286286
await Promise.all([environmentService.appSettingsHome.fsPath, environmentService.extensionsPath].map(p => mkdirp(p)));
287287

288-
const configurationService = new ConfigurationService(environmentService.settingsResource);
288+
const configurationService = new ConfigurationService(environmentService.appSettingsHome);
289289
await configurationService.initialize();
290290

291291
services.set(IEnvironmentService, environmentService);

src/vs/editor/standalone/browser/simpleServices.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,8 @@ export class SimpleConfigurationService implements IConfigurationService {
413413

414414
private readonly _configuration: Configuration;
415415

416+
userSettingsResource = URI.file('settings.json');
417+
416418
constructor() {
417419
this._configuration = new Configuration(new DefaultConfigurationModel(), new ConfigurationModel());
418420
}

src/vs/platform/configuration/common/configuration.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export interface IConfigurationChangeEvent {
6565
export interface IConfigurationService {
6666
_serviceBrand: any;
6767

68+
userSettingsResource: URI;
6869
onDidChangeConfiguration: Event<IConfigurationChangeEvent>;
6970

7071
getConfigurationData(): IConfigurationData | null;

src/vs/platform/configuration/node/configurationService.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,25 @@ import { ConfigWatcher } from 'vs/base/node/config';
1414
import { onUnexpectedError } from 'vs/base/common/errors';
1515
import { URI } from 'vs/base/common/uri';
1616
import { Schemas } from 'vs/base/common/network';
17+
import { joinPath } from 'vs/base/common/resources';
1718

1819
export class ConfigurationService extends Disposable implements IConfigurationService, IDisposable {
1920

2021
_serviceBrand: any;
2122

23+
readonly userSettingsResource: URI;
24+
2225
private configuration: Configuration;
2326
private userConfigModelWatcher: ConfigWatcher<ConfigurationModelParser> | undefined;
2427

2528
private readonly _onDidChangeConfiguration: Emitter<IConfigurationChangeEvent> = this._register(new Emitter<IConfigurationChangeEvent>());
2629
readonly onDidChangeConfiguration: Event<IConfigurationChangeEvent> = this._onDidChangeConfiguration.event;
2730

2831
constructor(
29-
private readonly settingsResource: URI
32+
appSettingsHome: URI
3033
) {
3134
super();
35+
this.userSettingsResource = joinPath(appSettingsHome, 'settings.json');
3236
this.configuration = new Configuration(new DefaultConfigurationModel(), new ConfigurationModel());
3337
this._register(Registry.as<IConfigurationRegistry>(Extensions.Configuration).onDidUpdateConfiguration(configurationProperties => this.onDidDefaultConfigurationChange(configurationProperties)));
3438
}
@@ -38,13 +42,13 @@ export class ConfigurationService extends Disposable implements IConfigurationSe
3842
this.userConfigModelWatcher.dispose();
3943
}
4044

41-
if (this.settingsResource.scheme !== Schemas.file) {
45+
if (this.userSettingsResource.scheme !== Schemas.file) {
4246
return Promise.resolve();
4347
}
4448
return new Promise<void>((c, e) => {
45-
this.userConfigModelWatcher = this._register(new ConfigWatcher(this.settingsResource.fsPath, {
46-
changeBufferDelay: 300, onError: error => onUnexpectedError(error), defaultConfig: new ConfigurationModelParser(this.settingsResource.fsPath), parse: (content: string, parseErrors: any[]) => {
47-
const userConfigModelParser = new ConfigurationModelParser(this.settingsResource.fsPath);
49+
this.userConfigModelWatcher = this._register(new ConfigWatcher(this.userSettingsResource.fsPath, {
50+
changeBufferDelay: 300, onError: error => onUnexpectedError(error), defaultConfig: new ConfigurationModelParser(this.userSettingsResource.fsPath), parse: (content: string, parseErrors: any[]) => {
51+
const userConfigModelParser = new ConfigurationModelParser(this.userSettingsResource.fsPath);
4852
userConfigModelParser.parseContent(content);
4953
parseErrors = [...userConfigModelParser.errors];
5054
return userConfigModelParser;

src/vs/platform/configuration/test/common/testConfigurationService.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export class TestConfigurationService implements IConfigurationService {
1414

1515
private configurationByRoot: TernarySearchTree<any> = TernarySearchTree.forPaths<any>();
1616

17+
userSettingsResource = URI.file('settings.json');
18+
1719
public reloadConfiguration<T>(): Promise<T> {
1820
return Promise.resolve(this.getValue());
1921
}

src/vs/platform/configuration/test/node/configurationService.test.ts

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ import * as uuid from 'vs/base/common/uuid';
1414
import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry';
1515
import { testFile } from 'vs/base/test/node/utils';
1616
import { URI } from 'vs/base/common/uri';
17+
import { dirname } from 'vs/base/common/resources';
1718

1819
suite('ConfigurationService - Node', () => {
1920

2021
test('simple', async () => {
21-
const res = await testFile('config', 'config.json');
22+
const res = await testFile('config', 'settings.json');
2223
fs.writeFileSync(res.testFile, '{ "foo": "bar" }');
2324

24-
const service = new ConfigurationService(URI.file(res.testFile));
25+
const service = new ConfigurationService(dirname(URI.file(res.testFile)));
2526
await service.initialize();
2627
const config = service.getValue<{
2728
foo: string;
@@ -35,11 +36,11 @@ suite('ConfigurationService - Node', () => {
3536
});
3637

3738
test('config gets flattened', async () => {
38-
const res = await testFile('config', 'config.json');
39+
const res = await testFile('config', 'settings.json');
3940

4041
fs.writeFileSync(res.testFile, '{ "testworkbench.editor.tabs": true }');
4142

42-
const service = new ConfigurationService(URI.file(res.testFile));
43+
const service = new ConfigurationService(dirname(URI.file(res.testFile)));
4344
await service.initialize();
4445
const config = service.getValue<{
4546
testworkbench: {
@@ -58,11 +59,11 @@ suite('ConfigurationService - Node', () => {
5859
});
5960

6061
test('error case does not explode', async () => {
61-
const res = await testFile('config', 'config.json');
62+
const res = await testFile('config', 'settings.json');
6263

6364
fs.writeFileSync(res.testFile, ',,,,');
6465

65-
const service = new ConfigurationService(URI.file(res.testFile));
66+
const service = new ConfigurationService(dirname(URI.file(res.testFile)));
6667
await service.initialize();
6768
const config = service.getValue<{
6869
foo: string;
@@ -77,9 +78,9 @@ suite('ConfigurationService - Node', () => {
7778
const id = uuid.generateUuid();
7879
const parentDir = path.join(os.tmpdir(), 'vsctests', id);
7980
const newDir = path.join(parentDir, 'config', id);
80-
const testFile = path.join(newDir, 'config.json');
81+
const testFile = path.join(newDir, 'settings.json');
8182

82-
const service = new ConfigurationService(URI.file(testFile));
83+
const service = new ConfigurationService(dirname(URI.file(testFile)));
8384
await service.initialize();
8485

8586
const config = service.getValue<{ foo: string }>();
@@ -89,9 +90,9 @@ suite('ConfigurationService - Node', () => {
8990
});
9091

9192
test('trigger configuration change event', async () => {
92-
const res = await testFile('config', 'config.json');
93+
const res = await testFile('config', 'settings.json');
9394

94-
const service = new ConfigurationService(URI.file(res.testFile));
95+
const service = new ConfigurationService(dirname(URI.file(res.testFile)));
9596
await service.initialize();
9697
return new Promise((c, e) => {
9798
service.onDidChangeConfiguration(() => {
@@ -105,11 +106,11 @@ suite('ConfigurationService - Node', () => {
105106
});
106107

107108
test('reloadConfiguration', async () => {
108-
const res = await testFile('config', 'config.json');
109+
const res = await testFile('config', 'settings.json');
109110

110111
fs.writeFileSync(res.testFile, '{ "foo": "bar" }');
111112

112-
const service = new ConfigurationService(URI.file(res.testFile));
113+
const service = new ConfigurationService(dirname(URI.file(res.testFile)));
113114
await service.initialize();
114115
let config = service.getValue<{
115116
foo: string;
@@ -158,17 +159,17 @@ suite('ConfigurationService - Node', () => {
158159
}
159160
});
160161

161-
let serviceWithoutFile = new ConfigurationService(URI.file('__testFile'));
162+
let serviceWithoutFile = new ConfigurationService(dirname(URI.file('__testFile')));
162163
await serviceWithoutFile.initialize();
163164
let setting = serviceWithoutFile.getValue<ITestSetting>();
164165

165166
assert.ok(setting);
166167
assert.equal(setting.configuration.service.testSetting, 'isSet');
167168

168-
return testFile('config', 'config.json').then(async res => {
169+
return testFile('config', 'settings.json').then(async res => {
169170
fs.writeFileSync(res.testFile, '{ "testworkbench.editor.tabs": true }');
170171

171-
const service = new ConfigurationService(URI.file(res.testFile));
172+
const service = new ConfigurationService(dirname(URI.file(res.testFile)));
172173

173174
let setting = service.getValue<ITestSetting>();
174175

@@ -200,8 +201,8 @@ suite('ConfigurationService - Node', () => {
200201
}
201202
});
202203

203-
const r = await testFile('config', 'config.json');
204-
const service = new ConfigurationService(URI.file(r.testFile));
204+
const r = await testFile('config', 'settings.json');
205+
const service = new ConfigurationService(dirname(URI.file(r.testFile)));
205206
service.initialize();
206207

207208
let res = service.inspect('something.missing');
@@ -238,8 +239,8 @@ suite('ConfigurationService - Node', () => {
238239
}
239240
});
240241

241-
const r = await testFile('config', 'config.json');
242-
const service = new ConfigurationService(URI.file(r.testFile));
242+
const r = await testFile('config', 'settings.json');
243+
const service = new ConfigurationService(dirname(URI.file(r.testFile)));
243244
service.initialize();
244245

245246
let res = service.inspect('lookup.service.testNullSetting');

0 commit comments

Comments
 (0)