mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 09:36:08 +08:00
core: support hydrooj patch
This commit is contained in:
4 files changed
+55
-1
No files matched your search
@@ -0,0 +1,21 @@
|
||||
import child from 'child_process';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import superagent from 'superagent';
|
||||
|
||||
if (!process.argv[2]) throw new Error('No target specified');
|
||||
|
||||
// TODO support module other than packages
|
||||
const target = process.argv[2].startsWith('packages/') ? process.argv[2] : `packages/${process.argv[2]}`;
|
||||
|
||||
const result = child.execSync(`git diff ${target}`);
|
||||
const patch = result.toString().replace(new RegExp(`${target}/`, 'g'), '');
|
||||
const filename = `${path.basename(target)}.patch`;
|
||||
fs.writeFileSync(filename, patch);
|
||||
superagent.post('https://hydro.ac/paste')
|
||||
.set('accept', 'application/json')
|
||||
.send({ body: patch, filename })
|
||||
.end((err, res) => {
|
||||
if (err) throw err;
|
||||
console.log('Paste created on ', res.text);
|
||||
});
|
||||
+2
-1
@@ -25,7 +25,8 @@
|
||||
"lint:ui:ci": "yarn workspace @hydrooj/ui-default lint --ext .js,.ts,.jsx,.tsx .",
|
||||
"debug": "node --trace-warnings --async-stack-traces --trace-deprecation packages/hydrooj/bin/hydrooj --debug --template",
|
||||
"start": "packages/hydrooj/bin/hydrooj",
|
||||
"postinstall": "node build/prepare.js"
|
||||
"postinstall": "node build/prepare.js",
|
||||
"gen-patch": "node -r @hydrooj/utils/lib/register build/gen-patch.ts"
|
||||
},
|
||||
"version": "1.0.0",
|
||||
"license": "AGPL-3.0-only",
|
||||
|
||||
@@ -204,6 +204,7 @@ if (!argv.args[0] || argv.args[0] === 'cli') {
|
||||
fs.removeSync(newAddonPath);
|
||||
console.log(`Successfully uninstalled ${name}.`);
|
||||
});
|
||||
require('../src/commands/patch').register(cli);
|
||||
cli.help();
|
||||
cli.parse();
|
||||
if (!cli.matchedCommand) {
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import child from 'child_process';
|
||||
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 = `${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
|
||||
}
|
||||
Reference in new issue
Block a user