|
| 1 | +#!/bin/env node |
| 2 | + |
| 3 | +const root_name = "root" |
| 4 | +const root_password = "password" |
| 5 | +const roj_url = 'http://localhost:3000/' |
| 6 | + |
| 7 | +const ProgressBar = require('progress'); |
| 8 | +const { program } = require('commander'); |
| 9 | +const fs = require("fs") |
| 10 | +const {execSync} = require("child_process") |
| 11 | +const yaml = require("js-yaml") |
| 12 | + |
| 13 | + |
| 14 | +if(!fs.existsSync('header')){ |
| 15 | + console.log("先在网页上登录admin,然后获取 header存入header文件") |
| 16 | + process.exit(0) |
| 17 | +} |
| 18 | + |
| 19 | + |
| 20 | + |
| 21 | +program.option("-f --force","强制上传") |
| 22 | + .arguments('<start> [end]') |
| 23 | + .action(function(start,end){ |
| 24 | + Start = start |
| 25 | + End = end |
| 26 | + }) |
| 27 | +program.parse(process.argv) |
| 28 | + |
| 29 | +function upload({file,content,pid,title,time=1000,memory=128,stack=128,spj='default',level=1}){ |
| 30 | + if( memory > 4096) memory = Math.ceil(memory/1024/1024) |
| 31 | + let args = [ |
| 32 | + ["file",`@${file}`], |
| 33 | + ["content",`${content}`], |
| 34 | + ["pid",pid], |
| 35 | + ["title",title], |
| 36 | + ["time",time], |
| 37 | + ["memory",memory], |
| 38 | + ["stack",stack], |
| 39 | + ["spj",spj], |
| 40 | + ["level",level] |
| 41 | + ] |
| 42 | + let args_1 = (args.map( d => `-F "${d[0]}=${d[1]}"`)).join(" ") |
| 43 | + if(program.force) |
| 44 | + args_1 += " -F upload_force=1" |
| 45 | + return execSync(`curl -X POST ${args_1} -H @header ${roj_url}admin/problem/create`,{encoding:'utf8'}) |
| 46 | + //console.log(`curl -X POST ${args_1} -H @header ${roj_url}admin/problem/create`) |
| 47 | +} |
| 48 | + |
| 49 | +async function main(){ |
| 50 | + if(!End ) End = Start |
| 51 | + var bar = new ProgressBar(':bar :current/:total\n :m1', { total: End-Start+1 }); |
| 52 | + console.log(`你要上传的题目范围是:${Start} --> ${End}`) |
| 53 | + for( let i = Start ;i <= End ;i++){ |
| 54 | + if( fs.existsSync(`./problems/${i}`) ){ |
| 55 | + try { |
| 56 | + let config = yaml.safeLoad(fs.readFileSync(`./problems/${i}/reference.yml`, 'utf8')); |
| 57 | + //let content = fs.readFileSync(`./problems/${i}/content.md`, 'utf8') |
| 58 | + if(!fs.existsSync(`./problems/${i}/content.md`)){ |
| 59 | + throw(`${i} content.md 不存在`) |
| 60 | + } |
| 61 | + execSync(`zip -j data.zip -r ./problems/${i}/data`) |
| 62 | + let ret = upload({file:'data.zip',content:`<problems/${i}/content.md`,pid:i,...config}) |
| 63 | + if( JSON.parse(ret).status !== 0){ |
| 64 | + throw(ret) |
| 65 | + } |
| 66 | + fs.unlinkSync(`data.zip`) |
| 67 | + bar.tick({ |
| 68 | + "m1":`成功 ${i}` |
| 69 | + }) |
| 70 | + } |
| 71 | + catch(e){ |
| 72 | + bar.tick({ |
| 73 | + "m1":`失败 ${i}` |
| 74 | + }) |
| 75 | + fs.writeFileSync("log",`fail at ${i}\n${e}\n\n\n`,{flag:"w+"}) |
| 76 | + } |
| 77 | + } |
| 78 | + else { |
| 79 | + |
| 80 | + bar.tick({ |
| 81 | + "m1":`失败 ${i} 不存在` |
| 82 | + }) |
| 83 | + fs.writeFileSync("log",`fail at ${i} 不存在\n\n\n`,{flag:"w+"}) |
| 84 | + } |
| 85 | + |
| 86 | + if(fs.existsSync('data.zip')) fs.unlinkSync(`data.zip`) |
| 87 | + } |
| 88 | +} |
| 89 | +main() |
0 commit comments