UNPKG

4.05 kBPlain TextView Raw
1#!/usr/bin/env node
2
3/**
4 * Module dependencies.
5 */
6var fs = require('fs');
7var path = require('path');
8var _ = require('lodash');
9var mysql = require('mysql2');
10var Promise = require("bluebird");
11var 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');
30var argv = yargs.argv;
31var command = argv._[0];
32var dbname = argv.dbname ? argv.dbname : 'codepush';
33var dbhost = argv.dbhost ? argv.dbhost : 'localhost';
34var dbuser = argv.dbuser ? argv.dbuser : 'root';
35var dbport = argv.dbport ? argv.dbport : 3306;
36var dbpassword = argv.dbpassword;
37
38if (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}