Auto-merge default config
This commit is contained in:
parent
56e8b4fe9a
commit
4b4ebeb59a
|
@ -1,17 +1,40 @@
|
|||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
const version = 1;
|
||||
const settingsVersion = 1;
|
||||
|
||||
var merge = function(base, target) {
|
||||
var merged = base;
|
||||
if (!target) {
|
||||
target = {};
|
||||
}
|
||||
for (var prop in target) {
|
||||
merged[prop] = target[prop];
|
||||
}
|
||||
return merged;
|
||||
};
|
||||
|
||||
var loadDefault = function(version) {
|
||||
if (version == null) {
|
||||
version = settingsVersion
|
||||
}
|
||||
switch (version) {
|
||||
case 1:
|
||||
return {
|
||||
teams: [],
|
||||
hideMenuBar: false,
|
||||
version: 1
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
var upgradeV0toV1 = function(config_v0) {
|
||||
return {
|
||||
teams: [{
|
||||
name: 'Primary team',
|
||||
url: config_v0.url
|
||||
}],
|
||||
hideMenuBar: false,
|
||||
version: 1
|
||||
};
|
||||
var config = loadDefault(1);
|
||||
config.teams.push({
|
||||
name: 'Primary team',
|
||||
url: config_v0.url
|
||||
});
|
||||
return config;
|
||||
};
|
||||
|
||||
var upgrade = function(config) {
|
||||
|
@ -25,27 +48,26 @@ var upgrade = function(config) {
|
|||
};
|
||||
|
||||
module.exports = {
|
||||
version: version,
|
||||
version: settingsVersion,
|
||||
|
||||
upgrade: upgrade,
|
||||
|
||||
readFileSync: function(configFile) {
|
||||
return JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
||||
var config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
||||
if (config.version === settingsVersion) {
|
||||
var default_config = this.loadDefault();
|
||||
config = merge(default_config, config);
|
||||
}
|
||||
return config;
|
||||
},
|
||||
|
||||
writeFileSync: function(configFile, config) {
|
||||
if (config.version != version) {
|
||||
throw 'version ' + config.version + ' is not equal to ' + version;
|
||||
if (config.version != settingsVersion) {
|
||||
throw 'version ' + config.version + ' is not equal to ' + settingsVersion;
|
||||
}
|
||||
var data = JSON.stringify(config, null, ' ');
|
||||
fs.writeFileSync(configFile, data, 'utf8');
|
||||
},
|
||||
|
||||
loadDefault: function() {
|
||||
return {
|
||||
teams: [],
|
||||
hideMenuBar: false,
|
||||
version: version
|
||||
};
|
||||
}
|
||||
loadDefault: loadDefault
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue