Ahora si que funcionan los filtros de vesiones

This commit is contained in:
2026-02-19 13:25:43 +01:00
parent f8afb1574e
commit 0037707325

View File

@@ -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
}