Files
Hydro/packages/hydrooj/src/commands/patch.ts
T
2023-04-08 16:15:04 +08:00

33 lines
1.0 KiB
TypeScript

import child from 'child_process';
import path from 'path';
import { CAC } from 'cac';
import fs from 'fs-extra';
import superagent from 'superagent';
import { Logger } from '@hydrooj/utils';
const logger = new Logger('patch');
export function register(cli: CAC) {
cli.command('patch <module> <patch>').action(async (filename, patch) => {
const mod = require.resolve(filename);
if (!mod) {
logger.error('Module %s not found', filename);
return;
}
logger.info('Patching %s', mod);
const res = await superagent.get(patch);
logger.info('Downloaded patch');
for (let i = 0; i <= 100; i++) {
const fp = path.join(path.dirname(mod), `${mod}.${i}.patch`);
if (fs.existsSync(fp)) continue;
patch = fp;
break;
}
await fs.writeFile(patch, res.text);
child.execSync(`patch ${mod} -o ${mod} < ${patch}`);
logger.info('Patched %s', mod);
});
// TODO: support revert patch
}