1 | #!/usr/bin/env node
|
2 |
|
3 | /**
|
4 | * Module dependencies.
|
5 | */
|
6 | var fs = require('fs');
|
7 | var path = require('path');
|
8 | var _ = require('lodash');
|
9 | var mysql = require('mysql2');
|
10 | var Promise = require("bluebird");
|
11 | var yargs = require('yargs')
|
12 | .usage('Usage: $0 <command> [options]')
|
13 | .command('init', '初始化数据库', {
|
14 | dbpassword: {
|
15 | alias: 'dbpassword',
|
16 | type: 'string'
|
17 | }
|
18 | })
|
19 | .command('upgrade', '升级数据库', {
|
20 | dbpassword: {
|
21 | alias: 'dbpassword',
|
22 | type: 'string'
|
23 | }
|
24 | })
|
25 | .example('$0 init --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306 --force', '初始化code-push-server数据库')
|
26 | .example('$0 upgrade --dbname codepush --dbhost localhost --dbuser root --dbpassword 123456 --dbport 3306', '升级code-push-server数据库')
|
27 | .default({dbname: 'codepush', dbhost: 'localhost', dbuser: 'root', dbpassword: null})
|
28 | .help('h')
|
29 | .alias('h', 'help');
|
30 | var argv = yargs.argv;
|
31 | var command = argv._[0];
|
32 | var dbname = argv.dbname ? argv.dbname : 'codepush';
|
33 | var dbhost = argv.dbhost ? argv.dbhost : 'localhost';
|
34 | var dbuser = argv.dbuser ? argv.dbuser : 'root';
|
35 | var dbport = argv.dbport ? argv.dbport : 3306;
|
36 | var dbpassword = argv.dbpassword;
|
37 |
|
38 | if (command === 'init') {
|
39 | var connection2;
|
40 | var connection = mysql.createConnection({
|
41 | host: dbhost,
|
42 | user: dbuser,
|
43 | password: dbpassword,
|
44 | port: dbport
|
45 | });
|
46 | var createDatabaseSql = argv.force ? `CREATE DATABASE IF NOT EXISTS ${dbname}` :
|
47 | `CREATE DATABASE ${dbname}`;
|
48 | Promise.promisifyAll(connection);
|
49 | connection.connect();
|
50 | connection.queryAsync(createDatabaseSql)
|
51 | .then(function(){
|
52 | connection2 = mysql.createConnection({
|
53 | host: dbhost,
|
54 | user: dbuser,
|
55 | password: dbpassword,
|
56 | database: dbname,
|
57 | multipleStatements: true,
|
58 | port: dbport
|
59 | });
|
60 | connection2.connect();
|
61 | Promise.promisifyAll(connection2);
|
62 | return connection2;
|
63 | })
|
64 | .then(function(connection2){
|
65 | var sql = fs.readFileSync(path.resolve(__dirname, '../sql/codepush-all.sql'), 'utf-8');
|
66 | return connection2.queryAsync(sql);
|
67 | })
|
68 | .then(function(){
|
69 | console.log('success.');
|
70 | })
|
71 | .catch(function(e){
|
72 | console.log(e);
|
73 | })
|
74 | .finally(function(){
|
75 | if(connection) connection.end();
|
76 | if(connection2) connection2.end()
|
77 | });
|
78 | } else if (command == 'upgrade'){
|
79 | var connection = mysql.createConnection({
|
80 | host: dbhost,
|
81 | user: dbuser,
|
82 | password: dbpassword,
|
83 | database: dbname,
|
84 | multipleStatements: true,
|
85 | port: dbport
|
86 | });
|
87 | Promise.promisifyAll(connection);
|
88 | connection.connect();
|
89 | return Promise.coroutine(function*(val){
|
90 | var version_no = '0.0.1';
|
91 | try {
|
92 | var rs = yield connection.queryAsync('select `version` from `versions` where `type`=1 limit 1');
|
93 | version_no = _.get(rs,'0.version', '0.0.1');
|
94 | } catch (e) {
|
95 | }
|
96 | if (version_no == '0.3.0') {
|
97 | console.log('Everything up-to-date.');
|
98 | process.exit(0);
|
99 | }
|
100 | var allSqlFile = [
|
101 | {version:'0.2.14', 'path':path.resolve(__dirname, '../sql/codepush-v0.2.14-patch.sql')},
|
102 | {version:'0.2.15', 'path':path.resolve(__dirname, '../sql/codepush-v0.2.15-patch.sql')},
|
103 | {version:'0.3.0', 'path':path.resolve(__dirname, '../sql/codepush-v0.3.0-patch.sql')}
|
104 | ];
|
105 | for (var i = 0; i < allSqlFile.length; i++) {
|
106 | if(!_.gt(allSqlFile[i]['version'], version_no)) {
|
107 | continue;
|
108 | }
|
109 | var sql = fs.readFileSync(allSqlFile[i]['path'], 'utf-8');
|
110 | yield connection.queryAsync(sql);
|
111 | }
|
112 | })()
|
113 | .then(function(){
|
114 | console.log('Upgrade success.');
|
115 | })
|
116 | .catch(function(e){
|
117 | console.error(e);
|
118 | })
|
119 | .finally(function(){
|
120 | if(connection) connection.end();
|
121 | });
|
122 | } else {
|
123 | yargs.showHelp();
|
124 | }
|