From d61db13a5fd2842491d62fc407628a8329eafdb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joe=CC=88l?= Date: Mon, 2 Aug 2021 18:28:21 +0200 Subject: [PATCH] fix(migrate): db push after reset if unexecutable step Closes #7411 --- packages/migrate/src/__tests__/DbPush.test.ts | 10 ++++++ packages/migrate/src/commands/DbPush.ts | 32 ++++++++++++------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/packages/migrate/src/__tests__/DbPush.test.ts b/packages/migrate/src/__tests__/DbPush.test.ts index bea3666a4fa1..6e220eeabcbc 100644 --- a/packages/migrate/src/__tests__/DbPush.test.ts +++ b/packages/migrate/src/__tests__/DbPush.test.ts @@ -193,7 +193,17 @@ describe('push', () => { prompt.inject(['y']) const result = DbPush.new().parse([]) + + const sqliteDbSizeBefore = ctx.fs.inspect('prisma/dev.db')!.size + await expect(result).resolves.toMatchInlineSnapshot(``) + + const sqliteDbSizeAfter = ctx.fs.inspect('prisma/dev.db')!.size + + expect(sqliteDbSizeBefore).toBeGreaterThan(10000) + expect(sqliteDbSizeAfter).toBeGreaterThan(10000) + expect(sqliteDbSizeAfter).toBeLessThan(sqliteDbSizeBefore) + expect(ctx.mocked['console.info'].mock.calls.join('\n')) .toMatchInlineSnapshot(` Prisma schema loaded from prisma/schema.prisma diff --git a/packages/migrate/src/commands/DbPush.ts b/packages/migrate/src/commands/DbPush.ts index 81324d91b7cc..f769801db58f 100644 --- a/packages/migrate/src/commands/DbPush.ts +++ b/packages/migrate/src/commands/DbPush.ts @@ -122,7 +122,12 @@ You can now remove the ${chalk.red('--preview-feature')} flag.`) let wasDatabaseReset = false if (args['--force-reset']) { console.info() - await migrate.reset() + try { + await migrate.reset() + } catch (e) { + migrate.stop() + throw e + } if (dbInfo.dbName && dbInfo.dbLocation) { console.info( `The ${dbInfo.dbType} ${dbInfo.schemaWord} "${dbInfo.dbName}" from "${dbInfo.dbLocation}" was successfully reset.`, @@ -187,22 +192,25 @@ ${chalk.bold.redBright('All data will be lost.')} } try { + // Reset first to remove all structure and data await migrate.reset() + if (dbInfo.dbName && dbInfo.dbLocation) { + console.info( + `The ${dbInfo.dbType} ${dbInfo.schemaWord} "${dbInfo.dbName}" from "${dbInfo.dbLocation}" was successfully reset.`, + ) + } else { + console.info( + `The ${dbInfo.dbType} ${dbInfo.schemaWord} was successfully reset.`, + ) + } + wasDatabaseReset = true + + // And now we can db push + await migrate.push({}) } catch (e) { migrate.stop() throw e } - - if (dbInfo.dbName && dbInfo.dbLocation) { - console.info( - `The ${dbInfo.dbType} ${dbInfo.schemaWord} "${dbInfo.dbName}" from "${dbInfo.dbLocation}" was successfully reset.`, - ) - } else { - console.info( - `The ${dbInfo.dbType} ${dbInfo.schemaWord} was successfully reset.`, - ) - } - wasDatabaseReset = true } if (migration.warnings && migration.warnings.length > 0) {