Ahora si que funcionan los filtros de vesiones
This commit is contained in:
28
src/index.ts
28
src/index.ts
@@ -65,11 +65,17 @@ function getArgs() {
|
||||
description: "Nombre de la tabla donde se almacenan las versiones de la BDD, por defecto 'db_versions'",
|
||||
default: "db_versions"
|
||||
})
|
||||
.option("baseVersion", {
|
||||
alias: "b",
|
||||
type: "string",
|
||||
description: "Versión a partir de la cual se aplican las migraciones independientemente de la almacenada en BDD"
|
||||
})
|
||||
.parse() as {
|
||||
target: string,
|
||||
env: string,
|
||||
migrations: string,
|
||||
versionTable: "db_versions" | string
|
||||
versionTable: "db_versions" | string,
|
||||
baseVersion: string
|
||||
}
|
||||
|
||||
//console.log("args", argv)
|
||||
@@ -77,7 +83,8 @@ function getArgs() {
|
||||
target: argv.target,
|
||||
env: argv.env,
|
||||
migrations: argv.migrations,
|
||||
versionTable: argv.versionTable
|
||||
versionTable: argv.versionTable,
|
||||
baseVersion: argv.baseVersion
|
||||
};
|
||||
}
|
||||
|
||||
@@ -202,7 +209,7 @@ async function writeAppliedVersion(db: Pool, versionTable: string, version: Migr
|
||||
*/
|
||||
async function runMigrations(args: {
|
||||
targetVersion: string,
|
||||
currentVersion?: string,
|
||||
baseVersion?: string,
|
||||
migrationDir: string,
|
||||
versionTable: string
|
||||
}) {
|
||||
@@ -233,8 +240,8 @@ async function runMigrations(args: {
|
||||
if (versionBdd == undefined) {
|
||||
console.log("[x] Error buscando la ultima version de la base de datos")
|
||||
}
|
||||
const currentVersion = args.currentVersion ?? versionBdd ?? "0.0.0"
|
||||
console.log("[i] Migrando desde la version " + currentVersion + " a la version " + args.targetVersion)
|
||||
const baseVersion = args.baseVersion ?? versionBdd ?? "0.0.0"
|
||||
console.log("[i] Migrando desde la version " + baseVersion + " a la version " + args.targetVersion)
|
||||
const files = await fs.readdir(args.migrationDir);
|
||||
const pendingMigrations: MigrationFile[] = files
|
||||
.map(f => (<MigrationFile>{
|
||||
@@ -242,10 +249,12 @@ async function runMigrations(args: {
|
||||
fileName: f,
|
||||
fullPath: path.join(args.migrationDir, f)
|
||||
}))
|
||||
// 1. Filtrar las migraciones > que la actual
|
||||
.filter(v => compareVersions(v.version, currentVersion) >= 0)
|
||||
// 1. Filtrar las migraciones > que la actual para volver a aplicar la actual
|
||||
// file > base
|
||||
.filter(file => compareVersions(file.version, baseVersion) == 1)
|
||||
// 2. Filtra las migraciones <= que la objetivo
|
||||
.filter(v => compareVersions(v.version, args.targetVersion) == -1)
|
||||
// file <= objetivo
|
||||
.filter(file => compareVersions(file.version, args.targetVersion) <= 0)
|
||||
.sort((a, b) => compareVersions(a.version, b.version));
|
||||
|
||||
if (pendingMigrations.length === 0) {
|
||||
@@ -294,7 +303,8 @@ async function main() {
|
||||
await runMigrations({
|
||||
targetVersion: args.target,
|
||||
migrationDir: args.migrations,
|
||||
versionTable: args.versionTable
|
||||
versionTable: args.versionTable,
|
||||
baseVersion: args.baseVersion
|
||||
})
|
||||
return 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user