diff --git a/src/apptask.js b/src/apptask.js index e60267e63..40200aec9 100644 --- a/src/apptask.js +++ b/src/apptask.js @@ -545,7 +545,12 @@ function install(app, args, progressCallback, callback) { addons.teardownAddons(app, addonsToRemove, next); }, - deleteAppDir.bind(null, app, { removeDirectory: false }), // do not remove any symlinked appdata dir + + function deleteAppDirIfNeeded(done) { + if (restoreConfig && !restoreConfig.backupId) return done(); // in-place import should not delete data dir + + deleteAppDir(app, { removeDirectory: false }, done); // do not remove any symlinked appdata dir + }, function deleteImageIfChanged(done) { if (!restoreConfig || !restoreConfig.oldManifest) return done(); @@ -575,14 +580,20 @@ function install(app, args, progressCallback, callback) { progressCallback.bind(null, { percent: 60, message: 'Setting up addons' }), addons.setupAddons.bind(null, app, app.manifest.addons), ], next); + } else if (!restoreConfig.backupId) { // in-place import + async.series([ + progressCallback.bind(null, { percent: 60, message: 'Importing addons in-place' }), + addons.restoreAddons.bind(null, app, app.manifest.addons), + ], next); } else { async.series([ progressCallback.bind(null, { percent: 65, message: 'Download backup and restoring addons' }), addons.setupAddons.bind(null, app, app.manifest.addons), addons.clearAddons.bind(null, app, app.manifest.addons), - backups.restoreApp.bind(null, app, app.manifest.addons, restoreConfig, (progress) => { - progressCallback({ percent: 65, message: `Restore - ${progress.message}` }); - }) + backups.downloadApp.bind(null, app, restoreConfig, (progress) => { + progressCallback({ percent: 65, message: progress.message }); + }), + addons.restoreAddons.bind(null, app, app.manifest.addons) ], next); } }, diff --git a/src/backups.js b/src/backups.js index 7e848d3e5..49c8b9f6d 100644 --- a/src/backups.js +++ b/src/backups.js @@ -14,7 +14,7 @@ exports = module.exports = { restore: restore, backupApp: backupApp, - restoreApp: restoreApp, + downloadApp: downloadApp, backupBoxAndApps: backupBoxAndApps, @@ -651,19 +651,12 @@ function restore(backupConfig, backupId, progressCallback, callback) { }); } -function restoreApp(app, addonsToRestore, restoreConfig, progressCallback, callback) { +function downloadApp(app, restoreConfig, progressCallback, callback) { assert.strictEqual(typeof app, 'object'); - assert.strictEqual(typeof addonsToRestore, 'object'); assert.strictEqual(typeof restoreConfig, 'object'); assert.strictEqual(typeof progressCallback, 'function'); assert.strictEqual(typeof callback, 'function'); - if (!restoreConfig.backupId) { // in-place import - debug('restoreApp: in-place import'); - - return addons.restoreAddons(app, addonsToRestore, callback); - } - const appDataDir = safe.fs.realpathSync(path.join(paths.APPS_DATA_DIR, app.id)); if (!appDataDir) return callback(safe.error); const dataLayout = new DataLayout(appDataDir, app.dataDir ? [{ localDir: app.dataDir, remoteDir: 'data' }] : []); @@ -674,11 +667,8 @@ function restoreApp(app, addonsToRestore, restoreConfig, progressCallback, callb getBackupConfigFunc(function (error, backupConfig) { if (error) return callback(error); - async.series([ - download.bind(null, backupConfig, restoreConfig.backupId, restoreConfig.backupFormat, dataLayout, progressCallback), - addons.restoreAddons.bind(null, app, addonsToRestore) - ], function (error) { - debug('restoreApp: time: %s', (new Date() - startTime)/1000); + download(backupConfig, restoreConfig.backupId, restoreConfig.backupFormat, dataLayout, progressCallback, function (error) { + debug('downloadApp: time: %s', (new Date() - startTime)/1000); callback(error); });