3
3
var Promise = require ( 'bluebird' ) ,
4
4
backup = require ( './backup' ) ,
5
5
fixtures = require ( './fixtures' ) ,
6
- models = require ( '../../models' ) ,
6
+ errors = require ( '../../errors' ) ,
7
+ i18n = require ( '../../i18n' ) ,
7
8
db = require ( '../../data/db' ) ,
8
9
sequence = require ( '../../utils/sequence' ) ,
9
10
versioning = require ( '../schema' ) . versioning ,
10
11
11
12
updateDatabaseSchema ,
12
13
migrateToDatabaseVersion ,
13
- update ;
14
+ update , logger ;
15
+
16
+ // @TODO : remove me asap!
17
+ logger = {
18
+ info : function info ( message ) {
19
+ errors . logComponentInfo ( 'Migrations' , message ) ;
20
+ } ,
21
+ warn : function warn ( message ) {
22
+ errors . logComponentWarn ( 'Skipping Migrations' , message ) ;
23
+ }
24
+ } ;
14
25
15
26
/**
16
27
* update database schema for one single version
@@ -47,9 +58,6 @@ migrateToDatabaseVersion = function migrateToDatabaseVersion(version, logger, mo
47
58
. then ( function ( ) {
48
59
return versioning . setDatabaseVersion ( transaction , version ) ;
49
60
} )
50
- . then ( function ( ) {
51
- return models . Settings . populateDefaults ( modelOptions ) ;
52
- } )
53
61
. then ( function ( ) {
54
62
transaction . commit ( ) ;
55
63
resolve ( ) ;
@@ -68,36 +76,54 @@ migrateToDatabaseVersion = function migrateToDatabaseVersion(version, logger, mo
68
76
/**
69
77
* ## Update
70
78
* Does a backup, then updates the database and fixtures
71
- *
72
- * @param {String } fromVersion
73
- * @param {String } toVersion
74
- * @param {{info: logger.info, warn: logger.warn} } logger
75
- * @returns {Promise<*> }
76
79
*/
77
- update = function update ( fromVersion , toVersion , logger , modelOptions ) {
78
- modelOptions = modelOptions || { } ;
79
- // Is the current version lower than the version we can migrate from?
80
- // E.g. is this blog's DB older than 003?
80
+ update = function update ( options ) {
81
+ options = options || { } ;
82
+
83
+ var fromVersion = options . fromVersion ,
84
+ toVersion = options . toVersion ,
85
+ forceMigration = options . forceMigration ,
86
+ versionsToUpdate ,
87
+ modelOptions = {
88
+ context : {
89
+ internal : true
90
+ }
91
+ } ;
92
+
93
+ // CASE: current database version is lower then we support
81
94
if ( fromVersion < versioning . canMigrateFromVersion ) {
82
- return versioning . showCannotMigrateError ( ) ;
95
+ return Promise . reject ( new errors . DatabaseVersion (
96
+ i18n . t ( 'errors.data.versioning.index.cannotMigrate.error' ) ,
97
+ i18n . t ( 'errors.data.versioning.index.cannotMigrate.context' ) ,
98
+ i18n . t ( 'common.seeLinkForInstructions' , { link : 'http://support.ghost.org/how-to-upgrade/' } )
99
+ ) ) ;
83
100
}
101
+ // CASE: the database exists but is out of date
102
+ else if ( fromVersion < toVersion || forceMigration ) {
103
+ fromVersion = forceMigration ? versioning . canMigrateFromVersion : fromVersion ;
84
104
85
- fromVersion = process . env . FORCE_MIGRATION ? versioning . canMigrateFromVersion : fromVersion ;
105
+ // Figure out which versions we're updating through.
106
+ // This shouldn't include the from/current version (which we're already on)
107
+ versionsToUpdate = versioning . getMigrationVersions ( fromVersion , toVersion ) . slice ( 1 ) ;
86
108
87
- // Figure out which versions we're updating through.
88
- // This shouldn't include the from/current version (which we're already on)
89
- var versionsToUpdate = versioning . getMigrationVersions ( fromVersion , toVersion ) . slice ( 1 ) ;
90
-
91
- return backup ( logger )
92
- . then ( function ( ) {
93
- return Promise . mapSeries ( versionsToUpdate , function ( versionToUpdate ) {
94
- return migrateToDatabaseVersion ( versionToUpdate , logger , modelOptions ) ;
109
+ return backup ( logger )
110
+ . then ( function ( ) {
111
+ return Promise . mapSeries ( versionsToUpdate , function ( versionToUpdate ) {
112
+ return migrateToDatabaseVersion ( versionToUpdate , logger , modelOptions ) ;
113
+ } ) ;
114
+ } )
115
+ . then ( function ( ) {
116
+ logger . info ( 'Finished!' ) ;
95
117
} ) ;
96
- } )
97
- . catch ( function ( ) {
98
- // we don't want that your blog can't start
99
- Promise . resolve ( ) ;
100
- } ) ;
118
+ }
119
+ // CASE: database is up-to-date
120
+ else if ( fromVersion === toVersion ) {
121
+ return Promise . resolve ( ) ;
122
+ }
123
+ // CASE: we don't understand the version
124
+ else {
125
+ return Promise . reject ( new errors . DatabaseVersion ( i18n . t ( 'errors.data.versioning.index.dbVersionNotRecognized' ) ) ) ;
126
+ }
101
127
} ;
102
128
103
129
module . exports = update ;
0 commit comments