From f1f1ec511dc0bb776dbf4c82cd023df74e4e0db9 Mon Sep 17 00:00:00 2001 From: Ben Irvin Date: Mon, 6 Mar 2023 14:11:19 +0100 Subject: [PATCH] fix transfer --- .../core/data-transfer/src/engine/index.ts | 2 +- .../strapi/lib/commands/transfer/transfer.js | 19 ++++++------------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/packages/core/data-transfer/src/engine/index.ts b/packages/core/data-transfer/src/engine/index.ts index d0e32d9c6f..d88d484398 100644 --- a/packages/core/data-transfer/src/engine/index.ts +++ b/packages/core/data-transfer/src/engine/index.ts @@ -254,7 +254,7 @@ class TransferEngine< ) { return new PassThrough({ objectMode: true, - transform: async (data, _encoding, callback) => { + transform: (data, _encoding, callback) => { this.#updateTransferProgress(stage, data, aggregate); this.#emitStageUpdate('progress', stage); callback(null, data); diff --git a/packages/core/strapi/lib/commands/transfer/transfer.js b/packages/core/strapi/lib/commands/transfer/transfer.js index 297db5f206..04d70c5bba 100644 --- a/packages/core/strapi/lib/commands/transfer/transfer.js +++ b/packages/core/strapi/lib/commands/transfer/transfer.js @@ -19,18 +19,10 @@ const { formatDiagnostic, loadersFactory, exitMessageText, + abortTransfer, } = require('./utils'); const { exitWith } = require('../utils/helpers'); -const gracefulAbort = async ({ engine }) => { - try { - await engine.abortTransfer(); - await strapi.destroy(); - } catch (e) { - // ignore - } -}; - /** * @typedef TransferCommandOptions Options given to the CLI transfer command * @@ -53,7 +45,7 @@ module.exports = async (opts) => { exitWith(1, 'Could not parse command arguments'); } - const strapi = await createStrapiInstance({ destroyOnSignal: false }); + const strapi = await createStrapiInstance(); let source; let destination; @@ -152,14 +144,15 @@ module.exports = async (opts) => { try { console.log(`Starting transfer...`); - // TODO: should this be the responsibility of the engine? Otherwise it has to be done in transfer/export/import and could be forgotten (leading to uninterruptable transfers) + // Abort transfer if user interrupts process ['SIGTERM', 'SIGINT', 'SIGQUIT'].forEach((signal) => { - process.on(signal, () => gracefulAbort({ engine, strapi })); + process.removeAllListeners(signal); + process.on(signal, () => abortTransfer({ engine, strapi })); }); results = await engine.transfer(); } catch (e) { - exitWith(1, exitMessageText('transfer', false)); + exitWith(1, exitMessageText('transfer', true)); } const table = buildTransferTable(results.engine);