feat: joj1 convert init
This commit is contained in:
parent
84e6f67f83
commit
80b33324e5
|
@ -1,10 +1,12 @@
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
from typing import Any, List
|
from typing import Any, List
|
||||||
|
|
||||||
import rtoml
|
import rtoml
|
||||||
|
|
||||||
from joj3_config_generator.models import joj1, repo, result, task
|
from joj3_config_generator.models import joj1, repo, result, task
|
||||||
|
from joj3_config_generator.processers.joj1 import get_joj1_run_stage
|
||||||
from joj3_config_generator.processers.repo import ( # get_teapotcheck_config,
|
from joj3_config_generator.processers.repo import ( # get_teapotcheck_config,
|
||||||
get_healthcheck_config,
|
get_healthcheck_config,
|
||||||
get_teapot_stage,
|
get_teapot_stage,
|
||||||
|
@ -25,14 +27,14 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
|
||||||
result_conf = result.Config(
|
result_conf = result.Config(
|
||||||
name=task_conf.task.name,
|
name=task_conf.task.name,
|
||||||
# TODO: specify the exact folder difference
|
# TODO: specify the exact folder difference
|
||||||
log_path=f"/home/tt/.cache/joj3/{task_conf.task.type_}.log",
|
log_path=f"{Path.home()}/.cache/joj3/{task_conf.task.type_}.log",
|
||||||
expire_unix_timestamp=(
|
expire_unix_timestamp=(
|
||||||
int(task_conf.release.deadline.timestamp())
|
int(task_conf.release.deadline.timestamp())
|
||||||
if task_conf.release.deadline
|
if task_conf.release.deadline
|
||||||
else -1
|
else -1
|
||||||
),
|
),
|
||||||
# FIXME: don't hardcode
|
# FIXME: don't hardcode
|
||||||
actor_csv_path="/home/tt/.config/joj/students.csv",
|
actor_csv_path=f"{Path.home()}/.config/joj/students.csv",
|
||||||
stage=result.Stage(
|
stage=result.Stage(
|
||||||
stages=[],
|
stages=[],
|
||||||
sandbox_token=repo_conf.sandbox_token,
|
sandbox_token=repo_conf.sandbox_token,
|
||||||
|
@ -59,47 +61,13 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
|
||||||
return result_conf
|
return result_conf
|
||||||
|
|
||||||
|
|
||||||
# FIXME: LLM generated convert function, only for demostration
|
|
||||||
def convert_joj1(joj1_conf: joj1.Config) -> task.Config:
|
def convert_joj1(joj1_conf: joj1.Config) -> task.Config:
|
||||||
stages = []
|
stages = [get_joj1_run_stage(joj1_conf)]
|
||||||
for language in joj1_conf.languages:
|
|
||||||
# Here you might want to create a stage for each language
|
|
||||||
# You can define a command based on language properties
|
|
||||||
command = f"run {language.language}"
|
|
||||||
# Assuming we don't have explicit files, we will set empty ones or default behavior
|
|
||||||
files = task.Files(import_=[], export=[]) # type: ignore
|
|
||||||
# Score can be derived from the first case or set to a default
|
|
||||||
score = 0
|
|
||||||
parsers: List[str] = [] # Define parsers if applicable
|
|
||||||
if joj1_conf.cases:
|
|
||||||
score = sum(
|
|
||||||
case.score for case in joj1_conf.cases
|
|
||||||
) # Sum scores for all cases
|
|
||||||
# Creating a stage for each language
|
|
||||||
stages.append(
|
|
||||||
task.Stage(
|
|
||||||
name=language.language,
|
|
||||||
command=command,
|
|
||||||
files=files,
|
|
||||||
score=score,
|
|
||||||
parsers=parsers,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
# Assuming no deadline is provided in `joj1`, you can set it accordingly
|
|
||||||
release_deadline = (
|
|
||||||
None # Placeholder for future implementation if deadlines are defined
|
|
||||||
)
|
|
||||||
|
|
||||||
return task.Config(
|
return task.Config(
|
||||||
task=task.Task(
|
task=task.Task(
|
||||||
name=(
|
name=("Blank Task"),
|
||||||
joj1_conf.languages[0].language
|
),
|
||||||
if joj1_conf.languages
|
release=task.Release(deadline=None),
|
||||||
else "Unnamed Task"
|
|
||||||
),
|
|
||||||
type_="",
|
|
||||||
), # FIXME: fix this type later
|
|
||||||
release=task.Release(deadline=release_deadline),
|
|
||||||
stages=stages,
|
stages=stages,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
|
|
||||||
import inquirer
|
|
||||||
import rtoml
|
import rtoml
|
||||||
import typer
|
import typer
|
||||||
import yaml
|
import yaml
|
||||||
|
@ -16,23 +15,6 @@ from joj3_config_generator.utils.logger import logger
|
||||||
app = typer.Typer(add_completion=False)
|
app = typer.Typer(add_completion=False)
|
||||||
|
|
||||||
|
|
||||||
@app.command()
|
|
||||||
def create(toml: typer.FileTextWrite) -> None:
|
|
||||||
"""
|
|
||||||
Create a new JOJ3 toml config file
|
|
||||||
"""
|
|
||||||
logger.info("Creating")
|
|
||||||
questions = [
|
|
||||||
inquirer.List(
|
|
||||||
"size",
|
|
||||||
message="What size do you need?",
|
|
||||||
choices=["Jumbo", "Large", "Standard", "Medium", "Small", "Micro"],
|
|
||||||
),
|
|
||||||
]
|
|
||||||
answers = inquirer.prompt(questions)
|
|
||||||
logger.info(answers)
|
|
||||||
|
|
||||||
|
|
||||||
@app.command()
|
@app.command()
|
||||||
def convert_joj1(yaml_file: typer.FileText, toml_file: typer.FileTextWrite) -> None:
|
def convert_joj1(yaml_file: typer.FileText, toml_file: typer.FileTextWrite) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -42,15 +24,22 @@ def convert_joj1(yaml_file: typer.FileText, toml_file: typer.FileTextWrite) -> N
|
||||||
joj1_obj = yaml.safe_load(yaml_file.read())
|
joj1_obj = yaml.safe_load(yaml_file.read())
|
||||||
joj1_model = joj1.Config(**joj1_obj)
|
joj1_model = joj1.Config(**joj1_obj)
|
||||||
task_model = convert_joj1_conf(joj1_model)
|
task_model = convert_joj1_conf(joj1_model)
|
||||||
result_dict = task_model.model_dump(by_alias=True)
|
result_dict = task_model.model_dump(by_alias=True, exclude_none=True)
|
||||||
toml_file.write(rtoml.dumps(result_dict))
|
toml_file.write(rtoml.dumps(result_dict))
|
||||||
|
|
||||||
|
|
||||||
@app.command()
|
@app.command()
|
||||||
def convert(root: Path = Path(".")) -> Dict[str, Any]:
|
def convert(
|
||||||
"""
|
root: Path = typer.Option(
|
||||||
Convert given dir of JOJ3 toml config files to JOJ3 json config files
|
Path("."),
|
||||||
"""
|
"--conf-root",
|
||||||
|
"-c",
|
||||||
|
help="This should be consistent with the root of how you run JOJ3",
|
||||||
|
),
|
||||||
|
debug: bool = typer.Option(
|
||||||
|
False, "--debug", "-d", help="Enable debug mode for more verbose output"
|
||||||
|
),
|
||||||
|
) -> Dict[str, Any]:
|
||||||
logger.info(f"Converting files in {root.absolute()}")
|
logger.info(f"Converting files in {root.absolute()}")
|
||||||
repo_toml_path = os.path.join(root.absolute(), "basic", "repo.toml")
|
repo_toml_path = os.path.join(root.absolute(), "basic", "repo.toml")
|
||||||
# TODO: loop through all dirs to find all task.toml
|
# TODO: loop through all dirs to find all task.toml
|
||||||
|
@ -69,16 +58,7 @@ def convert(root: Path = Path(".")) -> Dict[str, Any]:
|
||||||
json.dump(result_dict, result_file, ensure_ascii=False, indent=4)
|
json.dump(result_dict, result_file, ensure_ascii=False, indent=4)
|
||||||
result_file.write("\n")
|
result_file.write("\n")
|
||||||
|
|
||||||
# FIXME: change the path to the server
|
# distribution on json
|
||||||
# homework_name = "h8"
|
# need a get folder path function
|
||||||
# folder_path = f"/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/tests/homework/{homework_name}"
|
|
||||||
# folder_path = (
|
|
||||||
# "/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/homework/h8"
|
|
||||||
# )
|
|
||||||
# folder_path = "/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/homework/h7"
|
|
||||||
# for projects
|
|
||||||
# folder_path = "/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/tests/projects/p3/p3m3"
|
|
||||||
# folder_path = "/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/projects/p3/p3m1"
|
|
||||||
# assert os.path.exists(folder_path), f"there exists no {folder_path}"
|
|
||||||
# distribute_json(folder_path, repo_obj)
|
# distribute_json(folder_path, repo_obj)
|
||||||
return result_dict
|
return result_dict
|
||||||
|
|
|
@ -86,8 +86,7 @@ class Stage(BaseModel):
|
||||||
class Config:
|
class Config:
|
||||||
extra = "allow"
|
extra = "allow"
|
||||||
|
|
||||||
@root_validator(pre=True)
|
def gather_cases(self, values: Dict[str, Any]) -> Dict[str, Any]:
|
||||||
def gather_cases(cls: Type["Stage"], values: Dict[str, Any]) -> Dict[str, Any]:
|
|
||||||
cases = {k: v for k, v in values.items() if k.startswith("case")}
|
cases = {k: v for k, v in values.items() if k.startswith("case")}
|
||||||
for key in cases:
|
for key in cases:
|
||||||
values.pop(key)
|
values.pop(key)
|
||||||
|
@ -108,5 +107,5 @@ class Task(BaseModel):
|
||||||
|
|
||||||
class Config(BaseModel):
|
class Config(BaseModel):
|
||||||
task: Task
|
task: Task
|
||||||
release: Release # Release configuration
|
release: Release
|
||||||
stages: List[Stage] # list of stage configurations
|
stages: List[Stage] # list of stage configurations
|
||||||
|
|
50
joj3_config_generator/processers/joj1.py
Normal file
50
joj3_config_generator/processers/joj1.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
import humanfriendly
|
||||||
|
from pytimeparse.timeparse import timeparse
|
||||||
|
|
||||||
|
from joj3_config_generator.models import joj1, result, task
|
||||||
|
|
||||||
|
|
||||||
|
def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage:
|
||||||
|
default_cpu = timeparse("1s")
|
||||||
|
default_mem = humanfriendly.parse_size("32m")
|
||||||
|
cases_conf = []
|
||||||
|
for i, case in enumerate(joj1_config.cases):
|
||||||
|
cases_conf.append(
|
||||||
|
task.Stage(
|
||||||
|
score=case.score,
|
||||||
|
command=case.execute_args if case.execute_args else None,
|
||||||
|
limit=task.Limit(
|
||||||
|
cpu=timeparse(case.time) if case.time else default_cpu,
|
||||||
|
mem=(
|
||||||
|
humanfriendly.parse_size(case.memory)
|
||||||
|
if case.memory
|
||||||
|
else default_mem
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for i, case in enumerate(joj1_config.cases):
|
||||||
|
cases_conf[i].in_ = case.input
|
||||||
|
cases_conf[i].out_ = case.output
|
||||||
|
run_config = task.Stage(
|
||||||
|
name="This is the converted joj1 run stage",
|
||||||
|
group="joj",
|
||||||
|
parsers=["diff", "result-status"],
|
||||||
|
score=100,
|
||||||
|
limit=task.Limit(
|
||||||
|
cpu=(
|
||||||
|
timeparse(joj1_config.cases[0].time)
|
||||||
|
if joj1_config.cases[0].time is not None
|
||||||
|
else default_cpu
|
||||||
|
),
|
||||||
|
mem=(
|
||||||
|
humanfriendly.parse_size(joj1_config.cases[0].memory)
|
||||||
|
if joj1_config.cases[0].memory is not None
|
||||||
|
else default_mem
|
||||||
|
),
|
||||||
|
),
|
||||||
|
cases={f"case{i}": cases_conf[i] for i, case in enumerate(joj1_config.cases)},
|
||||||
|
)
|
||||||
|
return run_config
|
|
@ -28,7 +28,7 @@ def get_teapot_stage(repo_conf: repo.Config) -> result.StageDetail:
|
||||||
default=result.Cmd(
|
default=result.Cmd(
|
||||||
args=shlex.split(args_),
|
args=shlex.split(args_),
|
||||||
env=[
|
env=[
|
||||||
"LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"
|
f"LOG_FILE_PATH={Path.home()}/.cache/joint-teapot-debug.log"
|
||||||
], # TODO: fix it according to the task name
|
], # TODO: fix it according to the task name
|
||||||
),
|
),
|
||||||
cases=[],
|
cases=[],
|
||||||
|
@ -72,7 +72,7 @@ def get_debug_args(repo_conf: repo.Config) -> str:
|
||||||
args = ""
|
args = ""
|
||||||
args = (
|
args = (
|
||||||
args
|
args
|
||||||
+ f"/usr/local/bin/joint-teapot joj3-check-env /home/tt/.config/teapot/teapot.env --grading-repo-name {get_grading_repo_name()} --group-config"
|
+ f"/usr/local/bin/joint-teapot joj3-check-env {Path.home()}/.config/teapot/teapot.env --grading-repo-name {get_grading_repo_name()} --group-config "
|
||||||
)
|
)
|
||||||
group_config = ""
|
group_config = ""
|
||||||
for i, name in enumerate(repo_conf.groups.name):
|
for i, name in enumerate(repo_conf.groups.name):
|
||||||
|
@ -100,14 +100,16 @@ def get_healthcheck_config(repo_conf: repo.Config) -> result.StageDetail:
|
||||||
),
|
),
|
||||||
result.OptionalCmd(
|
result.OptionalCmd(
|
||||||
args=shlex.split(get_debug_args(repo_conf)),
|
args=shlex.split(get_debug_args(repo_conf)),
|
||||||
env=["LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"],
|
env=[
|
||||||
|
f"LOG_FILE_PATH={Path.home()}/.cache/joint-teapot-debug.log"
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
parsers=[
|
parsers=[
|
||||||
result.ParserConfig(name="healthcheck", with_={"score": 1}),
|
result.ParserConfig(name="healthcheck", with_={"score": 1}),
|
||||||
result.ParserConfig(name="debug", with_={"score": 1}),
|
result.ParserConfig(name="debug", with_={"score": 0}),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
return healthcheck_stage
|
return healthcheck_stage
|
||||||
|
@ -126,6 +128,8 @@ def get_hash(immutable_files: list[str]) -> str: # input should be a list
|
||||||
current_file_path = Path(__file__).resolve()
|
current_file_path = Path(__file__).resolve()
|
||||||
project_root = current_file_path.parents[2]
|
project_root = current_file_path.parents[2]
|
||||||
file_path = f"{project_root}/tests/immutable_p3-test/"
|
file_path = f"{project_root}/tests/immutable_p3-test/"
|
||||||
|
# default value as hardcoded
|
||||||
|
# file_path = "{Path.home()}/.cache/immutable"
|
||||||
immutable_hash = []
|
immutable_hash = []
|
||||||
for i, file in enumerate(immutable_files):
|
for i, file in enumerate(immutable_files):
|
||||||
immutable_files[i] = file_path + file.rsplit("/", 1)[-1]
|
immutable_files[i] = file_path + file.rsplit("/", 1)[-1]
|
||||||
|
|
|
@ -239,6 +239,7 @@ def fix_file(
|
||||||
return conf_stage
|
return conf_stage
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: add the logic of looping through all the files in the conf-root and generated conf.toml accordingly, while also get the path of the json file.
|
||||||
def fix_diff(
|
def fix_diff(
|
||||||
task_stage: task.Stage, conf_stage: result.StageDetail, task_conf: task.Config
|
task_stage: task.Stage, conf_stage: result.StageDetail, task_conf: task.Config
|
||||||
) -> result.StageDetail:
|
) -> result.StageDetail:
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,26 +1,10 @@
|
||||||
# general task configuration
|
# general task configuration
|
||||||
task.name = "hw7 ex2" # task name
|
task.name = "hw7 ex2" # task name
|
||||||
task.type = "homework/h7/e2"
|
task.type = "homework/h7/e2" # remove this task type later
|
||||||
|
|
||||||
release.deadline = 2024-12-30 23:59:59+08:00
|
release.deadline = 2024-12-30 23:59:59+08:00
|
||||||
release.stages = [ "compile" ]
|
release.stages = [ "compile" ]
|
||||||
|
|
||||||
[[stages]]
|
|
||||||
name = "healthcheck"
|
|
||||||
score = 1
|
|
||||||
|
|
||||||
# healthcheck parsers
|
|
||||||
parsers = ["healthcheck", "debug"]
|
|
||||||
cases0.command = "/usr/local/bin/repo-health-checker -repoSize=100"
|
|
||||||
case1.command = """/usr/local/bin/joint-teapot
|
|
||||||
joj3-check-env
|
|
||||||
/home/tt/.config/teapot/teapot.env"
|
|
||||||
--grading-repo-name
|
|
||||||
JOJ3-actions-examples
|
|
||||||
--group-config
|
|
||||||
joj=50:24,=100:24"""
|
|
||||||
case1.env = ["LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"]
|
|
||||||
|
|
||||||
[[stages]]
|
[[stages]]
|
||||||
name = "Compilation"
|
name = "Compilation"
|
||||||
command = "./tools/compile" # eg. script running cmake commands
|
command = "./tools/compile" # eg. script running cmake commands
|
||||||
|
|
|
@ -1,31 +1,25 @@
|
||||||
task = "cc"
|
|
||||||
|
|
||||||
[[stages]]
|
[[stages]]
|
||||||
name = "cc"
|
name = "This is the converted joj1 run stage"
|
||||||
command = "run cc"
|
group = "joj"
|
||||||
score = 100
|
score = 100
|
||||||
parsers = []
|
parsers = ["diff", "result-status"]
|
||||||
skip = []
|
skip = []
|
||||||
|
|
||||||
[stages.files]
|
|
||||||
import = []
|
|
||||||
export = []
|
|
||||||
|
|
||||||
[stages.limit]
|
[stages.limit]
|
||||||
mem = 4
|
mem = 32000000
|
||||||
cpu = 4
|
cpu = 1
|
||||||
stderr = 4
|
stderr = 800
|
||||||
stdout = 4
|
stdout = 800
|
||||||
|
|
||||||
[stages.dummy]
|
[stages.dummy]
|
||||||
comment = ""
|
comment = ""
|
||||||
score = 0
|
score = 0
|
||||||
forcequit = true
|
forcequit = false
|
||||||
|
|
||||||
[stages.result-status]
|
[stages.result-status]
|
||||||
comment = ""
|
comment = ""
|
||||||
score = 0
|
score = 0
|
||||||
forcequit = true
|
forcequit = false
|
||||||
|
|
||||||
[stages.keyword]
|
[stages.keyword]
|
||||||
keyword = []
|
keyword = []
|
||||||
|
@ -49,70 +43,566 @@ mem = true
|
||||||
stdout = false
|
stdout = false
|
||||||
stderr = false
|
stderr = false
|
||||||
exitstatus = false
|
exitstatus = false
|
||||||
[stages.diff.output]
|
|
||||||
score = 0
|
|
||||||
ignorespaces = false
|
|
||||||
hide = false
|
|
||||||
forcequit = true
|
|
||||||
|
|
||||||
[stages.cases]
|
[stages.file]
|
||||||
|
[stages.cases.case0]
|
||||||
[[stages]]
|
command = "-abcd --aaaa bbbb"
|
||||||
name = "c"
|
in = "case0.in"
|
||||||
command = "run c"
|
out = "case0.out"
|
||||||
score = 100
|
score = 10
|
||||||
parsers = []
|
parsers = []
|
||||||
skip = []
|
skip = []
|
||||||
|
|
||||||
[stages.files]
|
[stages.cases.case0.limit]
|
||||||
import = []
|
mem = 32000000
|
||||||
export = []
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
[stages.limit]
|
[stages.cases.case0.dummy]
|
||||||
mem = 4
|
|
||||||
cpu = 4
|
|
||||||
stderr = 4
|
|
||||||
stdout = 4
|
|
||||||
|
|
||||||
[stages.dummy]
|
|
||||||
comment = ""
|
comment = ""
|
||||||
score = 0
|
score = 0
|
||||||
forcequit = true
|
forcequit = false
|
||||||
|
|
||||||
[stages.result-status]
|
[stages.cases.case0.result-status]
|
||||||
comment = ""
|
comment = ""
|
||||||
score = 0
|
score = 0
|
||||||
forcequit = true
|
forcequit = false
|
||||||
|
|
||||||
[stages.keyword]
|
[stages.cases.case0.keyword]
|
||||||
keyword = []
|
keyword = []
|
||||||
weight = []
|
weight = []
|
||||||
|
|
||||||
[stages.clangtidy]
|
[stages.cases.case0.clangtidy]
|
||||||
keyword = []
|
keyword = []
|
||||||
weight = []
|
weight = []
|
||||||
|
|
||||||
[stages.cppcheck]
|
[stages.cases.case0.cppcheck]
|
||||||
keyword = []
|
keyword = []
|
||||||
weight = []
|
weight = []
|
||||||
|
|
||||||
[stages.cpplint]
|
[stages.cases.case0.cpplint]
|
||||||
keyword = []
|
keyword = []
|
||||||
weight = []
|
weight = []
|
||||||
|
|
||||||
[stages.result-detail]
|
[stages.cases.case0.result-detail]
|
||||||
time = true
|
time = true
|
||||||
mem = true
|
mem = true
|
||||||
stdout = false
|
stdout = false
|
||||||
stderr = false
|
stderr = false
|
||||||
exitstatus = false
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case0.file]
|
||||||
|
|
||||||
|
[stages.cases.case0.cases]
|
||||||
|
[stages.cases.case0.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case1]
|
||||||
|
in = "case1.in"
|
||||||
|
out = "case1.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case1.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case1.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case1.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case1.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case1.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case1.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case1.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case1.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case1.file]
|
||||||
|
|
||||||
|
[stages.cases.case1.cases]
|
||||||
|
[stages.cases.case1.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case2]
|
||||||
|
in = "case2.in"
|
||||||
|
out = "case2.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case2.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case2.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case2.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case2.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case2.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case2.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case2.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case2.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case2.file]
|
||||||
|
|
||||||
|
[stages.cases.case2.cases]
|
||||||
|
[stages.cases.case2.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case3]
|
||||||
|
in = "case3.in"
|
||||||
|
out = "case3.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case3.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case3.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case3.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case3.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case3.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case3.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case3.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case3.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case3.file]
|
||||||
|
|
||||||
|
[stages.cases.case3.cases]
|
||||||
|
[stages.cases.case3.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case4]
|
||||||
|
in = "case4.in"
|
||||||
|
out = "case4.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case4.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case4.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case4.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case4.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case4.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case4.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case4.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case4.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case4.file]
|
||||||
|
|
||||||
|
[stages.cases.case4.cases]
|
||||||
|
[stages.cases.case4.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case5]
|
||||||
|
in = "case5.in"
|
||||||
|
out = "case5.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case5.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case5.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case5.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case5.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case5.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case5.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case5.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case5.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case5.file]
|
||||||
|
|
||||||
|
[stages.cases.case5.cases]
|
||||||
|
[stages.cases.case5.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case6]
|
||||||
|
in = "case6.in"
|
||||||
|
out = "case6.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case6.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case6.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case6.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case6.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case6.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case6.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case6.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case6.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case6.file]
|
||||||
|
|
||||||
|
[stages.cases.case6.cases]
|
||||||
|
[stages.cases.case6.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case7]
|
||||||
|
in = "case7.in"
|
||||||
|
out = "case7.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case7.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case7.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case7.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case7.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case7.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case7.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case7.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case7.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case7.file]
|
||||||
|
|
||||||
|
[stages.cases.case7.cases]
|
||||||
|
[stages.cases.case7.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case8]
|
||||||
|
in = "case8.in"
|
||||||
|
out = "case8.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case8.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case8.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case8.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case8.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case8.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case8.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case8.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case8.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case8.file]
|
||||||
|
|
||||||
|
[stages.cases.case8.cases]
|
||||||
|
[stages.cases.case8.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case9]
|
||||||
|
in = "case9.in"
|
||||||
|
out = "case9.out"
|
||||||
|
score = 10
|
||||||
|
parsers = []
|
||||||
|
skip = []
|
||||||
|
|
||||||
|
[stages.cases.case9.limit]
|
||||||
|
mem = 32000000
|
||||||
|
cpu = 1
|
||||||
|
stderr = 800
|
||||||
|
stdout = 800
|
||||||
|
|
||||||
|
[stages.cases.case9.dummy]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case9.result-status]
|
||||||
|
comment = ""
|
||||||
|
score = 0
|
||||||
|
forcequit = false
|
||||||
|
|
||||||
|
[stages.cases.case9.keyword]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case9.clangtidy]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case9.cppcheck]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case9.cpplint]
|
||||||
|
keyword = []
|
||||||
|
weight = []
|
||||||
|
|
||||||
|
[stages.cases.case9.result-detail]
|
||||||
|
time = true
|
||||||
|
mem = true
|
||||||
|
stdout = false
|
||||||
|
stderr = false
|
||||||
|
exitstatus = false
|
||||||
|
|
||||||
|
[stages.cases.case9.file]
|
||||||
|
|
||||||
|
[stages.cases.case9.cases]
|
||||||
|
[stages.cases.case9.diff.output]
|
||||||
|
score = 0
|
||||||
|
ignorespaces = true
|
||||||
|
hide = false
|
||||||
|
forcequit = false
|
||||||
[stages.diff.output]
|
[stages.diff.output]
|
||||||
score = 0
|
score = 0
|
||||||
ignorespaces = false
|
ignorespaces = true
|
||||||
hide = false
|
hide = false
|
||||||
forcequit = true
|
forcequit = false
|
||||||
|
|
||||||
[stages.cases]
|
[task]
|
||||||
|
type = ""
|
||||||
|
name = "Blank Task"
|
||||||
|
|
||||||
[release]
|
[release]
|
||||||
deadline = "null"
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user