diff --git a/migrations/20171116191443-backups-add-manifestJson.js b/migrations/20171116191443-backups-add-manifestJson.js index 50cec1bd8..6d55ea37a 100644 --- a/migrations/20171116191443-backups-add-manifestJson.js +++ b/migrations/20171116191443-backups-add-manifestJson.js @@ -16,7 +16,8 @@ exports.up = function(db, callback) { if (error) return callback(error); async.eachSeries(backups, function (backup, next) { - var m = backup.restoreConfigJson ? JSON.stringify(JSON.parse(backup.restoreConfigJson).manifest) : null; + var m = backup.restoreConfigJson ? JSON.parse(backup.restoreConfigJson) : null; + if (m) m = JSON.stringify(m.manifest); db.runSql('UPDATE backups SET manifestJson=? WHERE id=?', [ m, backup.id ], next); }); diff --git a/src/appdb.js b/src/appdb.js index ab59df431..fb875103b 100644 --- a/src/appdb.js +++ b/src/appdb.js @@ -197,7 +197,7 @@ function add(id, appStoreId, manifest, location, portBindings, data, callback) { var altDomain = data.altDomain || null; var xFrameOptions = data.xFrameOptions || ''; var installationState = data.installationState || exports.ISTATE_PENDING_INSTALL; - var restoreConfigJson = JSON.stringify(data.restoreConfig || null); // used when cloning + var restoreConfigJson = data.restoreConfig ? JSON.stringify(data.restoreConfig) : null; // used when cloning var sso = 'sso' in data ? data.sso : null; var debugModeJson = data.debugMode ? JSON.stringify(data.debugMode) : null; diff --git a/src/apps.js b/src/apps.js index 4a6133137..df57e40a0 100644 --- a/src/apps.js +++ b/src/apps.js @@ -1108,10 +1108,14 @@ function restoreInstalledApps(callback) { async.map(apps, function (app, iteratorDone) { debug('marking %s for restore', app.location || app.id); - appdb.setInstallationCommand(app.id, appdb.ISTATE_PENDING_RESTORE, { oldConfig: null }, function (error) { - if (error) debug('did not mark %s for restore', app.location || app.id, error); + backups.getByAppIdPaged(1, 1, app.id, function (error, results) { + var restoreConfig = !error && results.length ? { backupId: results[0].id, backupFormat: results[0].format } : null; - iteratorDone(); // always succeed + appdb.setInstallationCommand(app.id, appdb.ISTATE_PENDING_RESTORE, { restoreConfig: restoreConfig, oldConfig: null }, function (error) { + if (error) debug('did not mark %s for restore', app.location || app.id, error); + + iteratorDone(); // always succeed + }); }); }, callback); });