fix: path issue
This commit is contained in:
		
							parent
							
								
									80b33324e5
								
							
						
					
					
						commit
						979185252d
					
				|  | @ -22,19 +22,21 @@ from joj3_config_generator.processers.task import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config: | def convert( | ||||||
|  |     repo_conf: repo.Config, task_conf: task.Config, conf_root: Path | ||||||
|  | ) -> result.Config: | ||||||
|     # Create the base ResultConf object |     # Create the base ResultConf object | ||||||
|     result_conf = result.Config( |     result_conf = result.Config( | ||||||
|         name=task_conf.task.name, |         name=task_conf.task.name, | ||||||
|         # TODO: specify the exact folder difference |         # exact folder difference specified by type | ||||||
|         log_path=f"{Path.home()}/.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 |         actor_csv_path=f"{Path.home()}/.config/joj/students.csv",  # students.csv position | ||||||
|         actor_csv_path=f"{Path.home()}/.config/joj/students.csv", |         max_total_score=repo_conf.max_total_score, | ||||||
|         stage=result.Stage( |         stage=result.Stage( | ||||||
|             stages=[], |             stages=[], | ||||||
|             sandbox_token=repo_conf.sandbox_token, |             sandbox_token=repo_conf.sandbox_token, | ||||||
|  | @ -44,18 +46,19 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config: | ||||||
| 
 | 
 | ||||||
|     # Construct healthcheck stage |     # Construct healthcheck stage | ||||||
|     healthcheck_stage = get_healthcheck_config(repo_conf) |     healthcheck_stage = get_healthcheck_config(repo_conf) | ||||||
|     # teapotcheck_stage = get_teapotcheck_config(repo_conf, task_conf) |  | ||||||
|     result_conf.stage.stages.append(healthcheck_stage) |     result_conf.stage.stages.append(healthcheck_stage) | ||||||
|     cached: List[str] = [] |     stages: List[str] = [] | ||||||
|     # Convert each stage in the task configuration |     # Convert each stage in the task configuration | ||||||
|     for task_stage in task_conf.stages: |     for task_stage in task_conf.stages: | ||||||
|         executor_with_config, cached = get_executorWithConfig(task_stage, cached) |         executor_with_config, stages = get_executorWithConfig( | ||||||
|  |             task_stage, stages, conf_root | ||||||
|  |         ) | ||||||
|         conf_stage = get_conf_stage(task_stage, executor_with_config) |         conf_stage = get_conf_stage(task_stage, executor_with_config) | ||||||
|         conf_stage = fix_result_detail(task_stage, conf_stage) |         conf_stage = fix_result_detail(task_stage, conf_stage) | ||||||
|         conf_stage = fix_dummy(task_stage, conf_stage) |         conf_stage = fix_dummy(task_stage, conf_stage) | ||||||
|         conf_stage = fix_keyword(task_stage, conf_stage) |         conf_stage = fix_keyword(task_stage, conf_stage) | ||||||
|         conf_stage = fix_file(task_stage, conf_stage) |         conf_stage = fix_file(task_stage, conf_stage) | ||||||
|         conf_stage = fix_diff(task_stage, conf_stage, task_conf) |         conf_stage = fix_diff(task_stage, conf_stage, task_conf, conf_root) | ||||||
|         result_conf.stage.stages.append(conf_stage) |         result_conf.stage.stages.append(conf_stage) | ||||||
| 
 | 
 | ||||||
|     return result_conf |     return result_conf | ||||||
|  | @ -72,7 +75,7 @@ def convert_joj1(joj1_conf: joj1.Config) -> task.Config: | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def distribute_json(folder_path: str, repo_obj: Any) -> None: | def distribute_json(folder_path: str, repo_obj: Any, conf_root: Path) -> None: | ||||||
|     for root, _, files in os.walk(folder_path): |     for root, _, files in os.walk(folder_path): | ||||||
|         for file in files: |         for file in files: | ||||||
|             if file.endswith(".toml"): |             if file.endswith(".toml"): | ||||||
|  | @ -81,7 +84,9 @@ def distribute_json(folder_path: str, repo_obj: Any) -> None: | ||||||
|                 with open(toml_file_path) as toml_file: |                 with open(toml_file_path) as toml_file: | ||||||
|                     task_toml = toml_file.read() |                     task_toml = toml_file.read() | ||||||
|                 task_obj = rtoml.loads(task_toml) |                 task_obj = rtoml.loads(task_toml) | ||||||
|                 result_model = convert(repo.Config(**repo_obj), task.Config(**task_obj)) |                 result_model = convert( | ||||||
|  |                     repo.Config(**repo_obj), task.Config(**task_obj), conf_root | ||||||
|  |                 ) | ||||||
|                 result_dict = result_model.model_dump(by_alias=True, exclude_none=True) |                 result_dict = result_model.model_dump(by_alias=True, exclude_none=True) | ||||||
| 
 | 
 | ||||||
|                 with open(json_file_path, "w") as result_file: |                 with open(json_file_path, "w") as result_file: | ||||||
|  |  | ||||||
|  | @ -36,29 +36,34 @@ def convert( | ||||||
|         "-c", |         "-c", | ||||||
|         help="This should be consistent with the root of how you run JOJ3", |         help="This should be consistent with the root of how you run JOJ3", | ||||||
|     ), |     ), | ||||||
|  |     repo_path: Path = typer.Option( | ||||||
|  |         Path("."), | ||||||
|  |         "--repo-root", | ||||||
|  |         "-r", | ||||||
|  |         help="This would be where you put your repo.toml file", | ||||||
|  |     ), | ||||||
|     debug: bool = typer.Option( |     debug: bool = typer.Option( | ||||||
|         False, "--debug", "-d", help="Enable debug mode for more verbose output" |         False, "--debug", "-d", help="Enable debug mode for more verbose output" | ||||||
|     ), |     ), | ||||||
| ) -> Dict[str, Any]: | ) -> Dict[str, Any]: | ||||||
|     logger.info(f"Converting files in {root.absolute()}") |     logger.info(f"Converting files in {repo_path.absolute()}") | ||||||
|     repo_toml_path = os.path.join(root.absolute(), "basic", "repo.toml") |     repo_toml_path = os.path.join(repo_path.absolute(), "basic", "repo.toml") | ||||||
|     # TODO: loop through all dirs to find all task.toml |     task_toml_path = os.path.join(repo_path.absolute(), "basic", "task.toml") | ||||||
|     task_toml_path = os.path.join(root.absolute(), "basic", "task.toml") |     result_json_path = os.path.join(repo_path.absolute(), "basic", "task.json") | ||||||
|     result_json_path = os.path.join(root.absolute(), "basic", "task.json") |     with open(repo_toml_path, encoding=None) as repo_file: | ||||||
|     with open(repo_toml_path) as repo_file: |  | ||||||
|         repo_toml = repo_file.read() |         repo_toml = repo_file.read() | ||||||
|     with open(task_toml_path) as task_file: |     with open(task_toml_path, encoding=None) as task_file: | ||||||
|         task_toml = task_file.read() |         task_toml = task_file.read() | ||||||
|     repo_obj = rtoml.loads(repo_toml) |     repo_obj = rtoml.loads(repo_toml) | ||||||
|     task_obj = rtoml.loads(task_toml) |     task_obj = rtoml.loads(task_toml) | ||||||
|     result_model = convert_conf(repo.Config(**repo_obj), task.Config(**task_obj)) |     result_model = convert_conf(repo.Config(**repo_obj), task.Config(**task_obj), root) | ||||||
|     result_dict = result_model.model_dump(by_alias=True, exclude_none=True) |     result_dict = result_model.model_dump(by_alias=True, exclude_none=True) | ||||||
| 
 | 
 | ||||||
|     with open(result_json_path, "w") as result_file: |     with open(result_json_path, "w", encoding=None) as result_file: | ||||||
|         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") | ||||||
| 
 | 
 | ||||||
|     # distribution on json |     # distribution on json | ||||||
|     # need a get folder path function |     # need a get folder path function | ||||||
|     # distribute_json(folder_path, repo_obj) |     # distribute_json(folder_path, repo_obj, conf_root) | ||||||
|     return result_dict |     return result_dict | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
| from typing import Any, Dict, List, Optional, Type | from typing import Any, Dict, List, Optional, Type | ||||||
| 
 | 
 | ||||||
| from pydantic import BaseModel, Field, root_validator | from pydantic import BaseModel, Field, model_validator | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class ParserResultDetail(BaseModel): | class ParserResultDetail(BaseModel): | ||||||
|  | @ -58,8 +58,6 @@ class Limit(BaseModel): | ||||||
| 
 | 
 | ||||||
| class Stage(BaseModel): | class Stage(BaseModel): | ||||||
|     name: Optional[str] = None  # Stage name |     name: Optional[str] = None  # Stage name | ||||||
|     group: Optional[str] = None  # TODO: may need to formulate this |  | ||||||
|     path: Optional[str] = None  # FIXME: this is highly possible to be removed in future |  | ||||||
|     env: Optional[list[str]] = None |     env: Optional[list[str]] = None | ||||||
|     command: Optional[str] = None  # Command to run |     command: Optional[str] = None  # Command to run | ||||||
|     files: Optional[Files] = None |     files: Optional[Files] = None | ||||||
|  | @ -79,6 +77,7 @@ class Stage(BaseModel): | ||||||
|     ) |     ) | ||||||
|     file: Optional[ParserFile] = ParserFile() |     file: Optional[ParserFile] = ParserFile() | ||||||
|     skip: Optional[list[str]] = [] |     skip: Optional[list[str]] = [] | ||||||
|  | 
 | ||||||
|     # cases related |     # cases related | ||||||
|     cases: Optional[Dict[str, "Stage"]] = {} |     cases: Optional[Dict[str, "Stage"]] = {} | ||||||
|     diff: Optional[ParserDiff] = ParserDiff() |     diff: Optional[ParserDiff] = ParserDiff() | ||||||
|  | @ -86,7 +85,9 @@ class Stage(BaseModel): | ||||||
|     class Config: |     class Config: | ||||||
|         extra = "allow" |         extra = "allow" | ||||||
| 
 | 
 | ||||||
|     def gather_cases(self, values: Dict[str, Any]) -> Dict[str, Any]: |     @model_validator(mode="before") | ||||||
|  |     @classmethod | ||||||
|  |     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) | ||||||
|  |  | ||||||
|  | @ -30,7 +30,6 @@ def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage: | ||||||
|         cases_conf[i].out_ = case.output |         cases_conf[i].out_ = case.output | ||||||
|     run_config = task.Stage( |     run_config = task.Stage( | ||||||
|         name="This is the converted joj1 run stage", |         name="This is the converted joj1 run stage", | ||||||
|         group="joj", |  | ||||||
|         parsers=["diff", "result-status"], |         parsers=["diff", "result-status"], | ||||||
|         score=100, |         score=100, | ||||||
|         limit=task.Limit( |         limit=task.Limit( | ||||||
|  | @ -45,6 +44,9 @@ def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage: | ||||||
|                 else default_mem |                 else default_mem | ||||||
|             ), |             ), | ||||||
|         ), |         ), | ||||||
|         cases={f"case{i}": cases_conf[i] for i, case in enumerate(joj1_config.cases)}, |         cases={f"case{i}": cases_conf[i] for i, _ in enumerate(joj1_config.cases)}, | ||||||
|     ) |     ) | ||||||
|     return run_config |     return run_config | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # TODO: get formatted joj1 config, match the criterion in the doc | ||||||
|  |  | ||||||
|  | @ -1,4 +1,6 @@ | ||||||
|  | import re | ||||||
| import shlex | import shlex | ||||||
|  | from pathlib import Path | ||||||
| from typing import List, Tuple | from typing import List, Tuple | ||||||
| 
 | 
 | ||||||
| from joj3_config_generator.models import result, task | from joj3_config_generator.models import result, task | ||||||
|  | @ -9,13 +11,12 @@ def get_conf_stage( | ||||||
| ) -> result.StageDetail: | ) -> result.StageDetail: | ||||||
|     conf_stage = result.StageDetail( |     conf_stage = result.StageDetail( | ||||||
|         name=task_stage.name if task_stage.name is not None else "", |         name=task_stage.name if task_stage.name is not None else "", | ||||||
|         # FIXME: to be deterined the way |         # group is determined by adding between "[]" in the name of the task | ||||||
|         # group=( |         group=( | ||||||
|         #     re.search(r'\[([^\[\]]+)\]', task_stage.name).group(1) |             match.group(1) | ||||||
|         #     if (task_stage.name is not None and re.search(r'\[([^\[\]]+)\]', task_stage.name)) |             if (match := re.search(r"\[([^\[\]]+)\]", task_stage.name or "")) | ||||||
|         #     else "" |             else "" | ||||||
|         # ), |         ), | ||||||
|         group=(task_stage.group if (task_stage.group is not None) else ""), |  | ||||||
|         executor=result.Executor( |         executor=result.Executor( | ||||||
|             name="sandbox", |             name="sandbox", | ||||||
|             with_=executor_with_config, |             with_=executor_with_config, | ||||||
|  | @ -33,7 +34,7 @@ def get_conf_stage( | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_executorWithConfig( | def get_executorWithConfig( | ||||||
|     task_stage: task.Stage, cached: List[str] |     task_stage: task.Stage, cached: List[str], conf_root: Path | ||||||
| ) -> Tuple[result.ExecutorWith, List[str]]: | ) -> Tuple[result.ExecutorWith, List[str]]: | ||||||
|     file_import = ( |     file_import = ( | ||||||
|         task_stage.files.import_ |         task_stage.files.import_ | ||||||
|  | @ -43,7 +44,7 @@ def get_executorWithConfig( | ||||||
|         and (task_stage.files.import_ is not None) |         and (task_stage.files.import_ is not None) | ||||||
|         else [] |         else [] | ||||||
|     ) |     ) | ||||||
|     copy_in_files = [file for file in file_import if (file not in cached)] |     copy_in_files = [file for file in file_import if file not in cached] | ||||||
|     file_export = ( |     file_export = ( | ||||||
|         task_stage.files.export |         task_stage.files.export | ||||||
|         if hasattr(task_stage, "files") |         if hasattr(task_stage, "files") | ||||||
|  | @ -59,16 +60,10 @@ def get_executorWithConfig( | ||||||
|                 if task_stage.command is not None |                 if task_stage.command is not None | ||||||
|                 else [] |                 else [] | ||||||
|             ), |             ), | ||||||
|             # FIXME: remove this trick |  | ||||||
|             copy_in={ |             copy_in={ | ||||||
|                 ("./.clang-tidy" if file.endswith("clang-tidy") else file): ( |                 file: result.CmdFile(src=f"{Path.home()}/{conf_root}/tools/{file}") | ||||||
|                     result.CmdFile(src=f"/home/tt/.config/joj/{file}") |                 # all copyin files store in this tools folder | ||||||
|                     if not file.endswith("main.cpp") |                 # are there any corner cases | ||||||
|                     else result.CmdFile( |  | ||||||
|                         # src=f"/home/tt/.config/joj/homework/h7/e3/ex3-main.cpp" |  | ||||||
|                         src=f"/home/tt/.config/joj/homework/h8/e1/ex1-main.cpp" |  | ||||||
|                     ) |  | ||||||
|                 ) |  | ||||||
|                 for file in copy_in_files |                 for file in copy_in_files | ||||||
|             }, |             }, | ||||||
|             stdin=( |             stdin=( | ||||||
|  | @ -116,7 +111,7 @@ def get_executorWithConfig( | ||||||
|                 ), |                 ), | ||||||
|             ), |             ), | ||||||
|         ), |         ), | ||||||
|         cases=[],  # You can add cases if needed |         cases=[], | ||||||
|     ) |     ) | ||||||
|     if file_export is not None: |     if file_export is not None: | ||||||
|         for file in file_export: |         for file in file_export: | ||||||
|  | @ -239,9 +234,11 @@ 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, | ||||||
|  |     conf_root: Path, | ||||||
| ) -> result.StageDetail: | ) -> result.StageDetail: | ||||||
|     if task_stage.parsers is not None and "diff" in task_stage.parsers: |     if task_stage.parsers is not None and "diff" in task_stage.parsers: | ||||||
|         diff_parser = next((p for p in conf_stage.parsers if p.name == "diff"), None) |         diff_parser = next((p for p in conf_stage.parsers if p.name == "diff"), None) | ||||||
|  | @ -280,8 +277,7 @@ def fix_diff( | ||||||
|             stage_cases.append( |             stage_cases.append( | ||||||
|                 result.OptionalCmd( |                 result.OptionalCmd( | ||||||
|                     stdin=result.CmdFile( |                     stdin=result.CmdFile( | ||||||
|                         src=f"/home/tt/.config/joj/{task_conf.task.type_}/{stdin}" |                         src=f"{Path.home()}/{conf_root}/{task_conf.task.type_}/{stdin}" | ||||||
|                         # src=f"/home/tt/.config/joj/{task_stage.path}/{stdin}" |  | ||||||
|                     ), |                     ), | ||||||
|                     args=(shlex.split(command) if command is not None else None), |                     args=(shlex.split(command) if command is not None else None), | ||||||
|                     cpu_limit=cpu_limit, |                     cpu_limit=cpu_limit, | ||||||
|  | @ -304,8 +300,7 @@ def fix_diff( | ||||||
|                             { |                             { | ||||||
|                                 "score": diff_output.score, |                                 "score": diff_output.score, | ||||||
|                                 "fileName": "stdout", |                                 "fileName": "stdout", | ||||||
|                                 "answerPath": f"/home/tt/.config/joj/{task_conf.task.type_}/{stdout}", |                                 "answerPath": f"{Path.home()}/{conf_root}/{task_conf.task.type_}/{stdout}", | ||||||
|                                 # "answerPath": f"/home/tt/.config/joj/{task_stage.path}/{stdin}", |  | ||||||
|                                 "forceQuitOnDiff": diff_output.forcequit, |                                 "forceQuitOnDiff": diff_output.forcequit, | ||||||
|                                 "alwaysHide": diff_output.hide, |                                 "alwaysHide": diff_output.hide, | ||||||
|                                 "compareSpace": not diff_output.ignorespaces, |                                 "compareSpace": not diff_output.ignorespaces, | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -3,7 +3,6 @@ task.name = "hw7 ex2" # task name | ||||||
| task.type = "homework/h7/e2" # remove this task type later | 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" ] |  | ||||||
| 
 | 
 | ||||||
| [[stages]] | [[stages]] | ||||||
| name = "Compilation" | name = "Compilation" | ||||||
|  | @ -76,7 +75,6 @@ result-detail.mem = false | ||||||
| 
 | 
 | ||||||
| [[stages]] | [[stages]] | ||||||
| name = "[joj] ex2-asan" | name = "[joj] ex2-asan" | ||||||
| group = "run" |  | ||||||
| command="./h7/build/ex2-asan -a" | command="./h7/build/ex2-asan -a" | ||||||
| files.import = [ "h7/build/ex2-asan" ] | files.import = [ "h7/build/ex2-asan" ] | ||||||
| limit.mem = 91224961 | limit.mem = 91224961 | ||||||
|  | @ -168,7 +166,6 @@ case9.in = "case9.in" | ||||||
| 
 | 
 | ||||||
| [[stages]] | [[stages]] | ||||||
| name = "[joj] ex2-msan" | name = "[joj] ex2-msan" | ||||||
| group = "joj" |  | ||||||
| command="./h7/build/ex2-msan -a" | command="./h7/build/ex2-msan -a" | ||||||
| files.import = [ "h7/build/ex2-msan" ] | files.import = [ "h7/build/ex2-msan" ] | ||||||
| limit.mem = 91224961 | limit.mem = 91224961 | ||||||
|  | @ -352,7 +349,6 @@ case9.in = "case9.in" | ||||||
| 
 | 
 | ||||||
| [[stages]] | [[stages]] | ||||||
| name = "[joj] ex2" | name = "[joj] ex2" | ||||||
| group = "joj" |  | ||||||
| command="./h7/build/ex2" | command="./h7/build/ex2" | ||||||
| files.import = [ "h7/build/ex2" ] | files.import = [ "h7/build/ex2" ] | ||||||
| score = 10 | score = 10 | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ import json | ||||||
| import os | import os | ||||||
| from typing import Any, Dict, Tuple | from typing import Any, Dict, Tuple | ||||||
| 
 | 
 | ||||||
|  | import Path | ||||||
| import rtoml | import rtoml | ||||||
| 
 | 
 | ||||||
| from joj3_config_generator.convert import convert | from joj3_config_generator.convert import convert | ||||||
|  | @ -28,7 +29,7 @@ def read_convert_files( | ||||||
| 
 | 
 | ||||||
| def load_case(case_name: str) -> None: | def load_case(case_name: str) -> None: | ||||||
|     repo, task, expected_result = read_convert_files(case_name) |     repo, task, expected_result = read_convert_files(case_name) | ||||||
|     result = convert(repo, task).model_dump( |     result = convert(repo, task, conf_root=Path(".")).model_dump( | ||||||
|         mode="json", by_alias=True, exclude_none=True |         mode="json", by_alias=True, exclude_none=True | ||||||
|     ) |     ) | ||||||
|     assert result == expected_result |     assert result == expected_result | ||||||
|  |  | ||||||
|  | @ -1,608 +0,0 @@ | ||||||
| [[stages]] |  | ||||||
| name = "This is the converted joj1 run stage" |  | ||||||
| group = "joj" |  | ||||||
| score = 100 |  | ||||||
| parsers = ["diff", "result-status"] |  | ||||||
| skip = [] |  | ||||||
| 
 |  | ||||||
| [stages.limit] |  | ||||||
| mem = 32000000 |  | ||||||
| cpu = 1 |  | ||||||
| stderr = 800 |  | ||||||
| stdout = 800 |  | ||||||
| 
 |  | ||||||
| [stages.dummy] |  | ||||||
| comment = "" |  | ||||||
| score = 0 |  | ||||||
| forcequit = false |  | ||||||
| 
 |  | ||||||
| [stages.result-status] |  | ||||||
| comment = "" |  | ||||||
| score = 0 |  | ||||||
| forcequit = false |  | ||||||
| 
 |  | ||||||
| [stages.keyword] |  | ||||||
| keyword = [] |  | ||||||
| weight = [] |  | ||||||
| 
 |  | ||||||
| [stages.clangtidy] |  | ||||||
| keyword = [] |  | ||||||
| weight = [] |  | ||||||
| 
 |  | ||||||
| [stages.cppcheck] |  | ||||||
| keyword = [] |  | ||||||
| weight = [] |  | ||||||
| 
 |  | ||||||
| [stages.cpplint] |  | ||||||
| keyword = [] |  | ||||||
| weight = [] |  | ||||||
| 
 |  | ||||||
| [stages.result-detail] |  | ||||||
| time = true |  | ||||||
| mem = true |  | ||||||
| stdout = false |  | ||||||
| stderr = false |  | ||||||
| exitstatus = false |  | ||||||
| 
 |  | ||||||
| [stages.file] |  | ||||||
| [stages.cases.case0] |  | ||||||
| command = "-abcd --aaaa bbbb" |  | ||||||
| in = "case0.in" |  | ||||||
| out = "case0.out" |  | ||||||
| score = 10 |  | ||||||
| parsers = [] |  | ||||||
| skip = [] |  | ||||||
| 
 |  | ||||||
| [stages.cases.case0.limit] |  | ||||||
| mem = 32000000 |  | ||||||
| cpu = 1 |  | ||||||
| stderr = 800 |  | ||||||
| stdout = 800 |  | ||||||
| 
 |  | ||||||
| [stages.cases.case0.dummy] |  | ||||||
| comment = "" |  | ||||||
| score = 0 |  | ||||||
| forcequit = false |  | ||||||
| 
 |  | ||||||
| [stages.cases.case0.result-status] |  | ||||||
| comment = "" |  | ||||||
| score = 0 |  | ||||||
| forcequit = false |  | ||||||
| 
 |  | ||||||
| [stages.cases.case0.keyword] |  | ||||||
| keyword = [] |  | ||||||
| weight = [] |  | ||||||
| 
 |  | ||||||
| [stages.cases.case0.clangtidy] |  | ||||||
| keyword = [] |  | ||||||
| weight = [] |  | ||||||
| 
 |  | ||||||
| [stages.cases.case0.cppcheck] |  | ||||||
| keyword = [] |  | ||||||
| weight = [] |  | ||||||
| 
 |  | ||||||
| [stages.cases.case0.cpplint] |  | ||||||
| keyword = [] |  | ||||||
| weight = [] |  | ||||||
| 
 |  | ||||||
| [stages.cases.case0.result-detail] |  | ||||||
| time = true |  | ||||||
| mem = true |  | ||||||
| stdout = false |  | ||||||
| stderr = 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] |  | ||||||
| score = 0 |  | ||||||
| ignorespaces = true |  | ||||||
| hide = false |  | ||||||
| forcequit = false |  | ||||||
| 
 |  | ||||||
| [task] |  | ||||||
| type = "" |  | ||||||
| name = "Blank Task" |  | ||||||
| 
 |  | ||||||
| [release] |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user