#!/usr/bin/env node /** * Module dependencies. */ var fs = require('fs'); var path = require('path'); var _ = require('lodash'); var mysql = require('mysql'); var Promise = require("bluebird"); var yargs = require('yargs') .usage('Usage: $0 [options]') .command('init', '初始化数据库') .command('upgrade', '升级数据库') .example('$0 init --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306 --force', '初始化code-push-server数据库') .example('$0 upgrade --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306', '升级code-push-server数据库') .default({dbname: 'codepush', dbhost: 'localhost', dbuser: 'root', dbpassword: null}) .help('h') .alias('h', 'help'); var argv = yargs.argv; var command = argv._[0]; var dbname = argv.dbname ? argv.dbname : 'codepush'; var dbhost = argv.dbhost ? argv.dbhost : 'localhost'; var dbuser = argv.dbuser ? argv.dbuser : 'root'; var dbport = argv.dbport ? argv.dbport : 3306; var dbpassword = null; if (_.isString(argv.dbpassword) || _.isNumber(argv.dbpassword)) { dbpassword = argv.dbpassword; } if (command === 'init') { var connection2; var connection = mysql.createConnection({ host: dbhost, user: dbuser, password: dbpassword, port: dbport }); var createDatabaseSql = argv.force ? `CREATE DATABASE IF NOT EXISTS ${dbname}` : `CREATE DATABASE ${dbname}`; Promise.promisifyAll(connection); connection.connect(); connection.queryAsync(createDatabaseSql) .then(function(){ connection2 = mysql.createConnection({ host: dbhost, user: dbuser, password: dbpassword, database: dbname, multipleStatements: true, port: dbport }); connection2.connect(); Promise.promisifyAll(connection2); return connection2; }) .then(function(connection2){ var sql = fs.readFileSync(path.resolve(__dirname, '../sql/codepush-all.sql'), 'utf-8'); return connection2.queryAsync(sql); }) .then(function(){ console.log('success.'); }) .catch(function(e){ console.log(e); }) .finally(function(){ if(connection) connection.end(); if(connection2) connection2.end() }); } else if (command == 'upgrade'){ var connection = mysql.createConnection({ host: dbhost, user: dbuser, password: dbpassword, database: dbname, multipleStatements: true, port: dbport }); Promise.promisifyAll(connection); connection.connect(); return Promise.coroutine(function*(val){ var version_no = '0.0.1'; try { var rs = yield connection.queryAsync('select `version` from `versions` where `type`=1 limit 1'); version_no = _.get(rs,'0.version', '0.0.1'); } catch (e) { } if (version_no == '0.2.15') { console.log('Everything up-to-date.'); process.exit(1); } var allSqlFile = [ {version:'0.2.14', 'path':path.resolve(__dirname, '../sql/codepush-v0.2.14.sql')}, {version:'0.2.15', 'path':path.resolve(__dirname, '../sql/codepush-v0.2.15.sql')} ]; for (var i = 0; i < allSqlFile.length; i++) { if(!_.gt(allSqlFile[i]['version'], version_no)) { continue; } var sql = fs.readFileSync(allSqlFile[i]['path'], 'utf-8'); yield connection.queryAsync(sql); } })() .then(function(){ console.log('Upgrade success.'); }) .catch(function(e){ console.error(e); }) .finally(function(){ if(connection) connection.end(); }); } else { yargs.showHelp(); }