不要怂,就是干,撸起袖子干!

Commit 73d77399 by Sascha Depold

Merge branch 'specify_config_in_binary' of https://github.com/terraflubb/sequeli…

…ze into terraflubb-specify_config_in_binary
2 parents 408ce386 f77416e7
Showing with 83 additions and 72 deletions
#!/usr/bin/env node #!/usr/bin/env node
const path = require("path") var path = require("path")
, fs = require("fs") , fs = require("fs")
, program = require("commander") , program = require("commander")
, Sequelize = require(__dirname + '/../index') , Sequelize = require(__dirname + '/../index')
, moment = require("moment") , moment = require("moment")
, _ = Sequelize.Utils._ , _ = Sequelize.Utils._
var configPath = process.cwd() + '/config' var configuration = {
, environment = process.env.NODE_ENV || 'development' configFile: process.cwd() + '/config/config.json',
, migrationsPath = process.cwd() + '/migrations' environment: process.env.NODE_ENV || 'development',
, packageJsonPath = __dirname + '/../package.json' version: require(__dirname + '/../package.json').version,
, packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString()) migrationsPath: process.cwd() + '/migrations'
, configFile = configPath + '/config.json' }
, configPathExists = fs.existsSync(configPath)
, configFileExists = fs.existsSync(configFile) var configFileExists = function() {
return fs.existsSync(configuration.configFile)
var writeConfig = function(config) { }
!configPathExists && fs.mkdirSync(configPath)
var relativeConfigFile = function() {
config = JSON.stringify(config) return path.relative(process.cwd(), configuration.configFile)
config = config.replace('{', '{\n ') }
config = config.replace(/,/g, ",\n ")
config = config.replace('}', "\n}") var writeDefaultConfig = function(config) {
var configPath = path.dirname(configuration.configFile)
fs.writeFileSync(configFile, config)
if (!fs.existsSync(configPath)) {
fs.mkdirSync(configPath)
}
config = JSON.stringify({
development: {
username: "root",
password: null,
database: 'database_development',
host: '127.0.0.1'
},
test: {
username: "root",
password: null,
database: 'database_test',
host: '127.0.0.1'
},
production: {
username: "root",
password: null,
database: 'database_production',
host: '127.0.0.1'
}
}, undefined, 2) + "\n"
fs.writeFileSync(configuration.configFile, config)
} }
var createMigrationsFolder = function(force) { var createMigrationsFolder = function(force) {
if(force) { if(force) {
console.log('Deleting the migrations folder.') console.log('Deleting the migrations folder. (--force)')
try { try {
fs.readdirSync(migrationsPath).forEach(function(filename) { fs.readdirSync(configuration.migrationsPath).forEach(function(filename) {
fs.unlinkSync(migrationsPath + '/' + filename) fs.unlinkSync(configuration.migrationsPath + '/' + filename)
}) })
} catch(e) {} } catch(e) {}
try { try {
fs.rmdirSync(migrationsPath) fs.rmdirSync(configuration.migrationsPath)
console.log('Successfully deleted the migrations folder.') console.log('Successfully deleted the migrations folder.')
} catch(e) {} } catch(e) {}
} }
console.log('Creating migrations folder.')
try { try {
fs.mkdirSync(migrationsPath) fs.mkdirSync(configuration.migrationsPath)
console.log('Successfully create migrations folder.') console.log('Successfully created migrations folder at "' + configuration.migrationsPath + '".')
} catch(e) { } catch(e) {
console.log('Migrations folder already exist.')
} }
} }
var readConfig = function() { var readConfig = function() {
var config var config
try { try {
config = fs.readFileSync(configFile) config = fs.readFileSync(configuration.configFile)
} catch(e) { } catch(e) {
throw new Error('Error reading "config/config.json".') throw new Error('Error reading "' + relativeConfigFile() + '".')
} }
try { try {
config = JSON.parse(config) config = JSON.parse(config)
} catch (e) { } catch (e) {
throw new Error('Error parsing "config/config.json" as JSON.') throw new Error('Error parsing "' + relativeConfigFile() + '" as JSON.')
} }
console.log('Loaded configuration file "' + relativeConfigFile() + '".')
if (config[environment]) { if (config[configuration.environment]) {
config = config[environment] console.log('Using environment "' + configuration.environment + '".')
config = config[configuration.environment]
} }
return config return config
} }
program program
.version(packageJson.version) .version(configuration.version)
.option('-i, --init', 'Initializes the project.') .option('-i, --init', 'Initializes the project.')
.option('-e, --env <environment>', 'Specify the environment.') .option('-e, --env <environment>', 'Specify the environment.')
.option('-m, --migrate', 'Run pending migrations.') .option('-m, --migrate', 'Run pending migrations.')
.option('-u, --undo', 'Undo the last migration.') .option('-u, --undo', 'Undo the last migration.')
.option('-f, --force', 'Forces the action to be done.') .option('-f, --force', 'Forces the action to be done.')
.option('-c, --create-migration [migration-name]', 'Creates a new migration.') .option('-c, --create-migration [migration-name]', 'Creates a new migration.')
.option('--config <config_file>', 'Specifies alternate config file.')
.parse(process.argv) .parse(process.argv)
if(typeof program.config === 'string') {
configuration.configFile = program.config
}
if(typeof program.env === 'string') { if(typeof program.env === 'string') {
environment = program.env configuration.environment = program.env
} }
console.log("Using environment '" + environment + "'.")
if(program.migrate) { if(program.migrate) {
if(configFileExists) { if(configFileExists()) {
var config var config
, options = {} , options = {}
...@@ -121,7 +150,7 @@ if(program.migrate) { ...@@ -121,7 +150,7 @@ if(program.migrate) {
options = _.extend(options, { logging: false }) options = _.extend(options, { logging: false })
var sequelize = new Sequelize(config.database, config.username, config.password, options) var sequelize = new Sequelize(config.database, config.username, config.password, options)
, migratorOptions = { path: migrationsPath } , migratorOptions = { path: configuration.migrationsPath }
, migrator = sequelize.getMigrator(migratorOptions) , migrator = sequelize.getMigrator(migratorOptions)
if(program.undo) { if(program.undo) {
...@@ -130,7 +159,6 @@ if(program.migrate) { ...@@ -130,7 +159,6 @@ if(program.migrate) {
if(meta) { if(meta) {
migrator = sequelize.getMigrator(_.extend(migratorOptions, meta), true) migrator = sequelize.getMigrator(_.extend(migratorOptions, meta), true)
} }
migrator.migrate({ method: 'down' }) migrator.migrate({ method: 'down' })
}) })
}) })
...@@ -138,35 +166,16 @@ if(program.migrate) { ...@@ -138,35 +166,16 @@ if(program.migrate) {
sequelize.migrate() sequelize.migrate()
} }
} else { } else {
console.log('Cannot find "config/config.json". Have you run "sequelize --init"?') console.log('Cannot find "' + relativeConfigFile() + '". Have you run "sequelize --init"?')
process.exit(1) process.exit(1)
} }
} else if(program.init) { } else if(program.init) {
if(!configFileExists || !!program.force) { if(!configFileExists() || !!program.force) {
writeConfig({ writeDefaultConfig()
development: {
username: "root",
password: null,
database: 'database_development',
host: '127.0.0.1'
},
test: {
username: "root",
password: null,
database: 'database_test',
host: '127.0.0.1'
},
production: {
username: "root",
password: null,
database: 'database_production',
host: '127.0.0.1'
}
})
console.log('Created "config/config.json"') console.log('Created "' + relativeConfigFile() + '"')
} else { } else {
console.log('"config/config.json" already exists. Run "sequelize --init --force" to overwrite.') console.log('The file "' + relativeConfigFile() + '" already exists. Run "sequelize --init --force" to overwrite it.')
process.exit(1) process.exit(1)
} }
...@@ -190,9 +199,11 @@ if(program.migrate) { ...@@ -190,9 +199,11 @@ if(program.migrate) {
" done()", " done()",
" }", " }",
"}" "}"
].join('\n') ].join('\n') + "\n"
fs.writeFileSync(migrationsPath + '/' + migrationName, migrationContent) fs.writeFileSync(configuration.migrationsPath + '/' + migrationName, migrationContent)
console.log('New migration "' + migrationName + '" was added to "' +
path.relative(process.cwd(), configuration.migrationsPath) + '/".')
} else { } else {
console.log('Try "sequelize --help" for usage information.') console.log('No action specified. Try "sequelize --help" for usage information.')
} }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!