import { BaseCommand, flags } from '@adonisjs/core/ace' import type { CommandOptions } from '@adonisjs/core/types/ace' import { Par2Merger } from '#services/par2_merger' /** The par2 merge (REBUILD.md, phase 2): releases whose files one par2 set describes become one. */ export default class ReleasesMerge extends BaseCommand { static commandName = 'releases:merge' static description = 'Merges the releases whose files one par2 set describes (what the prober read), every minute' static options: CommandOptions = { startApp: true, staysAlive: true } @flags.boolean({ description: 'One round over every set, then exit' }) declare once: boolean async run() { const merger = new Par2Merger() if (this.once) { const round = await merger.round() this.logger.info(`${round.sets} sets checked: ${round.releases} releases merged into ${round.merges}.`) await this.terminate() return } let done: () => void const finished = new Promise((resolve) => (done = resolve)) this.app.terminating(async () => { merger.stop() await finished }) await merger.run() this.logger.info('Merger stopped.') done!() await this.terminate() } }