forked from TryGhost/Ghost
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Magnificent Migrations of Magical Majesty
- Loading branch information
Showing
5 changed files
with
155 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,5 @@ | ||
var uuid = require('node-uuid'); | ||
|
||
/*global module */ | ||
module.exports = { | ||
posts: [ | ||
{ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
var uuid = require('node-uuid'); | ||
|
||
module.exports = { | ||
posts: [], | ||
|
||
settings: [ | ||
{ | ||
"uuid": uuid.v4(), | ||
"key": "installedPlugins", | ||
"value": "[]", | ||
"created_by": 1, | ||
"updated_by": 1, | ||
"type": "core" | ||
} | ||
], | ||
|
||
roles: [], | ||
|
||
permissions: [], | ||
|
||
permissions_roles: [] | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
var when = require('when'), | ||
knex = require('../../models/base').Knex, | ||
migrationVersion = '002', | ||
fixtures = require('../fixtures/' + migrationVersion), | ||
errors = require('../../errorHandling'), | ||
up, | ||
down; | ||
|
||
up = function () { | ||
|
||
return when.all([ | ||
|
||
// TODO: Create tables or modify tables in this general area | ||
|
||
]).then(function () { | ||
|
||
// Once we create all of the initial tables, bootstrap any of the data | ||
|
||
return when.all([ | ||
//knex('posts').insert(fixtures.posts), | ||
//knex('roles').insert(fixtures.roles), | ||
//knex('permissions').insert(fixtures.permissions), | ||
//knex('permissions_roles').insert(fixtures.permissions_roles), | ||
knex('settings').insert(fixtures.settings) | ||
]); | ||
|
||
}).then(function () { | ||
|
||
// Lastly, update the current version settings to reflect this version | ||
return knex('settings') | ||
.where('key', 'currentVersion') | ||
.update({ 'value': migrationVersion }); | ||
}); | ||
}; | ||
|
||
down = function () { | ||
return; | ||
}; | ||
|
||
exports.up = up; | ||
exports.down = down; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
|
||
var _ = require('underscore'), | ||
when = require('when'), | ||
series = require('when/sequence'), | ||
errors = require('../../errorHandling'), | ||
knex = require('../../models/base').Knex, | ||
initialVersion = "001", | ||
// This currentVersion string should always be the current version of Ghost, | ||
// we could probably load it from the config file. | ||
currentVersion = "002"; | ||
|
||
module.exports = { | ||
// Check for whether data is needed to be bootstrapped or not | ||
init: function () { | ||
var that = this; | ||
|
||
return knex.Schema.hasTable('settings').then(function () { | ||
// Check for the current version from the settings table | ||
return knex('settings') | ||
.where('key', 'currentVersion') | ||
.select('value') | ||
.then(function (currentVersionSetting) { | ||
// We are assuming here that the currentVersionSetting will | ||
// always be less than the currentVersion value. | ||
if (currentVersionSetting === currentVersion) { | ||
return when.resolve(); | ||
} | ||
|
||
// Bring the data up to the latest version | ||
return that.migrateFromVersion(currentVersion); | ||
}, errors.logAndThrowError); | ||
|
||
}, function () { | ||
// If the settings table doesn't exist, bring everything up from initial version. | ||
return that.migrateFromVersion(initialVersion); | ||
}); | ||
}, | ||
|
||
// Migrate from a specific version to the latest | ||
migrateFromVersion: function (version) { | ||
var versions = [], | ||
maxVersion = this.getVersionAfter(currentVersion), | ||
currVersion = version, | ||
tasks = []; | ||
|
||
// Aggregate all the versions we need to do migrations for | ||
while (currVersion !== maxVersion) { | ||
versions.push(currVersion); | ||
currVersion = this.getVersionAfter(currVersion); | ||
} | ||
|
||
// Aggregate all the individual up calls to use in the series(...) below | ||
tasks = _.map(versions, function (taskVersion) { | ||
return function () { | ||
try { | ||
var migration = require('./' + taskVersion); | ||
return migration.up(); | ||
} catch (e) { | ||
errors.logError(e); | ||
return when.reject(e); | ||
} | ||
}; | ||
}); | ||
|
||
// Run each migration in series | ||
return series(tasks); | ||
}, | ||
|
||
// Get the following version based on the current | ||
getVersionAfter: function (currVersion) { | ||
|
||
var currVersionNum = parseInt(currVersion, 10), | ||
nextVersion; | ||
|
||
// Default to initialVersion if not parsed | ||
if (isNaN(currVersionNum)) { | ||
currVersionNum = parseInt(initialVersion, 10); | ||
} | ||
|
||
currVersionNum += 1; | ||
|
||
nextVersion = String(currVersionNum); | ||
// Pad with 0's until 3 digits | ||
while (nextVersion.length < 3) { | ||
nextVersion = "0" + nextVersion; | ||
} | ||
|
||
return nextVersion; | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters