Merge pull request #515 from bitjson/blocks
non-destructively upgrade config
This commit is contained in:
commit
8811190de0
@ -26,7 +26,7 @@
|
|||||||
"maxstatements": 25,
|
"maxstatements": 25,
|
||||||
"maxcomplexity": 10,
|
"maxcomplexity": 10,
|
||||||
"maxdepth": 4,
|
"maxdepth": 4,
|
||||||
"maxlen": 120,
|
"maxlen": 140,
|
||||||
"multistr": true,
|
"multistr": true,
|
||||||
"predef": [
|
"predef": [
|
||||||
"after",
|
"after",
|
||||||
|
|||||||
@ -9,7 +9,7 @@ var path = require('path');
|
|||||||
var packageFile = require('../../package.json');
|
var packageFile = require('../../package.json');
|
||||||
var mkdirp = require('mkdirp');
|
var mkdirp = require('mkdirp');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var defaultBaseConfig = require('./default-base-config');
|
var defaultConfig = require('./default-config');
|
||||||
|
|
||||||
var version = '^' + packageFile.version;
|
var version = '^' + packageFile.version;
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ function createConfigDirectory(options, configDir, isGlobal, done) {
|
|||||||
if (err) {
|
if (err) {
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
var configInfo = defaultBaseConfig(options);
|
var configInfo = defaultConfig(options);
|
||||||
var config = configInfo.config;
|
var config = configInfo.config;
|
||||||
|
|
||||||
var configJSON = JSON.stringify(config, null, 2);
|
var configJSON = JSON.stringify(config, null, 2);
|
||||||
|
|||||||
@ -1,34 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
var path = require('path');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will return the path and default bitcore-node configuration on environment variables
|
|
||||||
* or default locations.
|
|
||||||
* @param {Object} options
|
|
||||||
* @param {String} options.network - "testnet" or "livenet"
|
|
||||||
* @param {String} options.datadir - Absolute path to bitcoin database directory
|
|
||||||
*/
|
|
||||||
function getDefaultBaseConfig(options) {
|
|
||||||
if (!options) {
|
|
||||||
options = {};
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
path: process.cwd(),
|
|
||||||
config: {
|
|
||||||
network: options.network || 'livenet',
|
|
||||||
port: 3001,
|
|
||||||
services: ['bitcoind', 'web'],
|
|
||||||
servicesConfig: {
|
|
||||||
bitcoind: {
|
|
||||||
spawn: {
|
|
||||||
datadir: options.datadir || path.resolve(process.env.HOME, '.bitcoin'),
|
|
||||||
exec: path.resolve(__dirname, '../../bin/bitcoind')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = getDefaultBaseConfig;
|
|
||||||
@ -3,6 +3,11 @@
|
|||||||
var path = require('path');
|
var path = require('path');
|
||||||
var mkdirp = require('mkdirp');
|
var mkdirp = require('mkdirp');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
var packageJson = require('../../package');
|
||||||
|
|
||||||
|
function getMajorVersion(versionString) {
|
||||||
|
return parseInt(versionString.split('.')[0]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will return the path and default bitcore-node configuration. It will search for the
|
* Will return the path and default bitcore-node configuration. It will search for the
|
||||||
@ -24,6 +29,29 @@ function getDefaultConfig(options) {
|
|||||||
mkdirp.sync(defaultPath);
|
mkdirp.sync(defaultPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fs.existsSync(defaultConfigFile)) {
|
||||||
|
var currentConfig = require(defaultConfigFile);
|
||||||
|
|
||||||
|
// config must have a `version` field with major equal to package major version
|
||||||
|
if(currentConfig.version && getMajorVersion(packageJson.version) === getMajorVersion(currentConfig.version)) {
|
||||||
|
return {
|
||||||
|
path: defaultPath,
|
||||||
|
config: currentConfig
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`The configuration file at '${defaultConfigFile}' is incompatible with this version of Bitcore.`);
|
||||||
|
|
||||||
|
var now = new Date();
|
||||||
|
// bitcore-node.YYYY-MM-DD.UnixTimestamp.json
|
||||||
|
var backupFileName = `bitcore-node.${now.getUTCFullYear()}-${now.getUTCMonth()}-${now.getUTCDate()}.${now.getTime()}.json`;
|
||||||
|
var backupFile = path.resolve(defaultPath, backupFileName);
|
||||||
|
fs.renameSync(defaultConfigFile, backupFile);
|
||||||
|
console.log(`The previous configuration file has been moved to: ${backupFile}.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Creating a new configuration file at: ${defaultConfigFile}.`);
|
||||||
|
|
||||||
var defaultServices = [
|
var defaultServices = [
|
||||||
'address',
|
'address',
|
||||||
'block',
|
'block',
|
||||||
@ -37,33 +65,28 @@ function getDefaultConfig(options) {
|
|||||||
'web'
|
'web'
|
||||||
];
|
];
|
||||||
|
|
||||||
if (options.additionalServices) {
|
|
||||||
defaultServices = defaultServices.concat(options.additionalServices);
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultDataDir = path.resolve(defaultPath, './data');
|
var defaultDataDir = path.resolve(defaultPath, './data');
|
||||||
|
|
||||||
if (!fs.existsSync(defaultDataDir)) {
|
if (!fs.existsSync(defaultDataDir)) {
|
||||||
mkdirp.sync(defaultDataDir);
|
mkdirp.sync(defaultDataDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fs.existsSync(defaultConfigFile)) {
|
var defaultConfig = {
|
||||||
var defaultConfig = {
|
version: packageJson.version,
|
||||||
network: 'testnet',
|
network: 'livenet',
|
||||||
port: 3001,
|
port: 3001,
|
||||||
services: defaultServices,
|
services: options.additionalServices ? defaultServices.concat(options.additionalServices) : defaultServices,
|
||||||
datadir: defaultDataDir,
|
datadir: defaultDataDir,
|
||||||
servicesConfig: {
|
servicesConfig: {
|
||||||
'insight-api': {
|
'insight-api': {
|
||||||
cwdRequirePath: 'node_modules/insight-api'
|
cwdRequirePath: 'node_modules/insight-api'
|
||||||
},
|
},
|
||||||
'insight-ui': {
|
'insight-ui': {
|
||||||
cwdRequirePath: 'node_modules/insight-ui'
|
cwdRequirePath: 'node_modules/insight-ui'
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
fs.writeFileSync(defaultConfigFile, JSON.stringify(defaultConfig, null, 2));
|
};
|
||||||
}
|
fs.writeFileSync(defaultConfigFile, JSON.stringify(defaultConfig, null, 2));
|
||||||
|
|
||||||
var config = JSON.parse(fs.readFileSync(defaultConfigFile, 'utf-8'));
|
var config = JSON.parse(fs.readFileSync(defaultConfigFile, 'utf-8'));
|
||||||
|
|
||||||
|
|||||||
@ -86,11 +86,13 @@ function lookInRequirePathConfig(req, service) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function lookInCwd(req, service) {
|
function lookInCwd(req, service) {
|
||||||
var location = service.config.cwdRequirePath ? service.config.cwdRequirePath : service.name
|
var location = service.config.cwdRequirePath ? service.config.cwdRequirePath : service.name;
|
||||||
try {
|
try {
|
||||||
return req(process.cwd() + '/' + location);
|
return req(process.cwd() + '/' + location);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
if(e.code !== 'MODULE_NOT_FOUND') log.error(e);
|
if(e.code !== 'MODULE_NOT_FOUND') {
|
||||||
|
log.error(e);
|
||||||
|
}
|
||||||
log.info('Checked the current working directory for service: ' + location);
|
log.info('Checked the current working directory for service: ' + location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,7 +102,9 @@ function lookInBuiltInPath(req, service) {
|
|||||||
var serviceFile = path.resolve(__dirname, '../services/' + service.name);
|
var serviceFile = path.resolve(__dirname, '../services/' + service.name);
|
||||||
return req(serviceFile);
|
return req(serviceFile);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
if(e.code !== 'MODULE_NOT_FOUND') log.error(e);
|
if(e.code !== 'MODULE_NOT_FOUND') {
|
||||||
|
log.error(e);
|
||||||
|
}
|
||||||
log.info('Checked the built-in path: lib/services, for service: ' + service.name);
|
log.info('Checked the built-in path: lib/services, for service: ' + service.name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -332,7 +332,7 @@ P2P.prototype._setResourceFilter = function(filter, resource) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
P2P.prototype._startBcoin = function() {
|
P2P.prototype._startBcoin = function() {
|
||||||
const network = ['livenet', 'live', 'main', 'mainnet'].indexOf(this.node.network) !== -1? 'main' : 'testnet';
|
var network = ['livenet', 'live', 'main', 'mainnet'].indexOf(this.node.network) !== -1? 'main' : 'testnet';
|
||||||
this._bcoin = new Bcoin({
|
this._bcoin = new Bcoin({
|
||||||
network: network,
|
network: network,
|
||||||
prefix: this.node.datadir
|
prefix: this.node.datadir
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"node": ">=8.2.0"
|
"node": ">=8.2.0"
|
||||||
},
|
},
|
||||||
"author": "BitPay <dev@bitpay.com>",
|
"author": "BitPay <dev@bitpay.com>",
|
||||||
"version": "4.0.0",
|
"version": "5.0.0",
|
||||||
"main": "./index.js",
|
"main": "./index.js",
|
||||||
"repository": "git://github.com/bitpay/bitcore-node.git",
|
"repository": "git://github.com/bitpay/bitcore-node.git",
|
||||||
"homepage": "https://github.com/bitpay/bitcore-node",
|
"homepage": "https://github.com/bitpay/bitcore-node",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user