Fix bug in default config / user config merging: Some arrays should be replaced while others should be merged
This commit is contained in:
parent
b4b20e4972
commit
8702e309ae
|
@ -42,17 +42,53 @@ function hasMessageConferenceAndArea(config) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ArrayReplaceKeyPaths = [
|
||||||
|
'loginServers.ssh.algorithms.kex',
|
||||||
|
'loginServers.ssh.algorithms.cipher',
|
||||||
|
'loginServers.ssh.algorithms.hmac',
|
||||||
|
'loginServers.ssh.algorithms.compress',
|
||||||
|
];
|
||||||
|
|
||||||
|
const ArrayReplaceKeys = [
|
||||||
|
'args',
|
||||||
|
'sendArgs', 'recvArgs', 'recvArgsNonBatch',
|
||||||
|
];
|
||||||
|
|
||||||
function mergeValidateAndFinalize(config, cb) {
|
function mergeValidateAndFinalize(config, cb) {
|
||||||
|
const defaultConfig = getDefaultConfig();
|
||||||
|
|
||||||
|
const arrayReplaceKeyPathsMutable = _.clone(ArrayReplaceKeyPaths);
|
||||||
|
const shouldReplaceArray = (arr, key) => {
|
||||||
|
if(ArrayReplaceKeys.includes(key)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for(let i = 0; i < arrayReplaceKeyPathsMutable.length; ++i) {
|
||||||
|
const o = _.get(defaultConfig, arrayReplaceKeyPathsMutable[i]);
|
||||||
|
if(_.isEqual(o, arr)) {
|
||||||
|
arrayReplaceKeyPathsMutable.splice(i, 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
async.waterfall(
|
async.waterfall(
|
||||||
[
|
[
|
||||||
function mergeWithDefaultConfig(callback) {
|
function mergeWithDefaultConfig(callback) {
|
||||||
const mergedConfig = _.mergeWith(
|
const mergedConfig = _.mergeWith(
|
||||||
getDefaultConfig(),
|
defaultConfig,
|
||||||
config, (conf1, conf2) => {
|
config,
|
||||||
// Arrays should always concat
|
(defConfig, userConfig, key) => {
|
||||||
if(_.isArray(conf1)) {
|
if(Array.isArray(defConfig) && Array.isArray(userConfig)) {
|
||||||
// :TODO: look for collisions & override dupes
|
//
|
||||||
return conf1.concat(conf2);
|
// Arrays are special: Some we merge, while others
|
||||||
|
// we simply replace.
|
||||||
|
//
|
||||||
|
if(shouldReplaceArray(defConfig, key)) {
|
||||||
|
return userConfig;
|
||||||
|
} else {
|
||||||
|
return _.uniq(defConfig.concat(userConfig));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue