mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 17:36:08 +08:00
33 lines
1.0 KiB
TypeScript
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
|
|
}
|