From 6a17b684ec90ac23f89c3459c43d421bf7d6bd14 Mon Sep 17 00:00:00 2001 From: Sam Lord Date: Wed, 16 Nov 2022 17:04:52 +0000 Subject: [PATCH] Fixed uploading zip files in import job no issue Zip files involved a call to `await`, which caused the microtask queue to be processed. The zip file is deleted during this time because the request has already completed. --- .../core/server/data/importer/import-manager.js | 16 ++++++++++++---- .../server/data/importer/importers/data/base.js | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ghost/core/core/server/data/importer/import-manager.js b/ghost/core/core/server/data/importer/import-manager.js index d4f94f43bf..7502a5918a 100644 --- a/ghost/core/core/server/data/importer/import-manager.js +++ b/ghost/core/core/server/data/importer/import-manager.js @@ -402,11 +402,21 @@ class ImportManager { * @returns {Promise>} */ async importFromFile(file, importOptions = {}) { + let importData; + if (importOptions.data) { + importData = importOptions.data; + } else { + // Step 1: Handle converting the file to usable data + // Has to be completed outside of job to ensure file is processed before being deleted + importData = await this.loadFile(file); + } + const env = config.get('env'); if (!env?.startsWith('testing') && !importOptions.runningInJob) { return jobManager.addJob({ job: () => this.importFromFile(file, Object.assign({}, importOptions, { - runningInJob: true + runningInJob: true, + data: importData })), offloaded: false }); @@ -414,9 +424,6 @@ class ImportManager { let importResult; try { - // Step 1: Handle converting the file to usable data - let importData = await this.loadFile(file); - // Step 2: Let the importers pre-process the data importData = await this.preProcess(importData); @@ -462,6 +469,7 @@ class ImportManager { * @property {Object} [user] * @property {string} [user.email] * @property {string} [importTag] + * @property {Object} [data] */ /** diff --git a/ghost/core/core/server/data/importer/importers/data/base.js b/ghost/core/core/server/data/importer/importers/data/base.js index 2b288f9adf..09c07880e6 100644 --- a/ghost/core/core/server/data/importer/importers/data/base.js +++ b/ghost/core/core/server/data/importer/importers/data/base.js @@ -10,6 +10,7 @@ class Base { this.options = options; this.modelName = options.modelName; + // Problems are currently constructed but not displayed to the user this.problems = []; this.errors = [];