Skip to content

Commit de269bb

Browse files
committed
microsoft#51935 fix overrides keys in configuration model while merging
1 parent 4dde912 commit de269bb

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

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

+2
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ export class ConfigurationModel implements IConfigurationModel {
8989
const [override] = overrides.filter(o => arrays.equals(o.identifiers, otherOverride.identifiers));
9090
if (override) {
9191
this.mergeContents(override.contents, otherOverride.contents);
92+
override.keys.push(...otherOverride.keys);
93+
override.keys = arrays.distinct(override.keys);
9294
} else {
9395
overrides.push(objects.deepClone(otherOverride));
9496
}

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

+16-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ suite('ConfigurationModel', () => {
190190
let result = base.merge(add);
191191

192192
assert.deepStrictEqual(result.contents, { 'a': { 'b': 2 } });
193-
assert.deepStrictEqual(result.overrides, [{ identifiers: ['c'], contents: { 'a': 2, 'b': 2 }, keys: ['a'] }]);
193+
assert.deepStrictEqual(result.overrides, [{ identifiers: ['c'], contents: { 'a': 2, 'b': 2 }, keys: ['a', 'b'] }]);
194194
assert.deepStrictEqual(result.override('c').contents, { 'a': 2, 'b': 2 });
195195
assert.deepStrictEqual(result.keys, ['a.b']);
196196
});
@@ -260,6 +260,21 @@ suite('ConfigurationModel', () => {
260260

261261
assert.deepStrictEqual(testObject.getKeysForOverrideIdentifier('x'), ['a', 'b']);
262262
});
263+
264+
test('Test merge when configuration models have multiple identifiers', () => {
265+
const testObject = new ConfigurationModel({ 'a': 1, 'c': 1 }, ['a', 'c'], [{ identifiers: ['y'], contents: { 'c': 1 }, keys: ['c'] }, { identifiers: ['x', 'y'], contents: { 'a': 2 }, keys: ['a'] }]);
266+
const target = new ConfigurationModel({ 'a': 2, 'b': 1 }, ['a', 'b'], [{ identifiers: ['x'], contents: { 'a': 3, 'b': 2 }, keys: ['a', 'b'] }, { identifiers: ['x', 'y'], contents: { 'b': 3 }, keys: ['b'] }]);
267+
268+
const actual = testObject.merge(target);
269+
270+
assert.deepStrictEqual(actual.contents, { 'a': 2, 'c': 1, 'b': 1 });
271+
assert.deepStrictEqual(actual.keys, ['a', 'c', 'b']);
272+
assert.deepStrictEqual(actual.overrides, [
273+
{ identifiers: ['y'], contents: { 'c': 1 }, keys: ['c'] },
274+
{ identifiers: ['x', 'y'], contents: { 'a': 2, 'b': 3 }, keys: ['a', 'b'] },
275+
{ identifiers: ['x'], contents: { 'a': 3, 'b': 2 }, keys: ['a', 'b'] },
276+
]);
277+
});
263278
});
264279

265280
suite('CustomConfigurationModel', () => {

0 commit comments

Comments
 (0)