dev #10
|  | @ -1,10 +1,12 @@ | |||
| import json | ||||
| import os | ||||
| from pathlib import Path | ||||
| from typing import Any, List | ||||
| 
 | ||||
| import rtoml | ||||
| 
 | ||||
| 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, | ||||
|     get_healthcheck_config, | ||||
|     get_teapot_stage, | ||||
|  | @ -25,14 +27,14 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config: | |||
|     result_conf = result.Config( | ||||
|         name=task_conf.task.name, | ||||
|         # 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=( | ||||
|             int(task_conf.release.deadline.timestamp()) | ||||
| 
					
					jon-lee marked this conversation as resolved
					
						
						
							Outdated
						
					
				 | ||||
|             if task_conf.release.deadline | ||||
|             else -1 | ||||
|         ), | ||||
|         # FIXME: don't hardcode | ||||
|         actor_csv_path="/home/tt/.config/joj/students.csv", | ||||
|         actor_csv_path=f"{Path.home()}/.config/joj/students.csv", | ||||
| 
					
					jon-lee marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						张泊明518370910136
						commented  where is it used? where is it used? 
				
					
						李衍志523370910113
						commented  this should be storing all the files that are about to be copy in or out this should be storing all the files that are about to be copy in or out 
				
					
						李衍志523370910113
						commented  It is as the input and output for the following functions about parsers It is as the input and output for the following functions about parsers 
				
					
						张泊明518370910136
						commented  so this feature is not implemented? so this feature is not implemented? 
				
					
						李衍志523370910113
						commented  it is this is a loop, so this  ```python
    if not repo_conf.force_skip_health_check_on_test or not current_test:
        result_conf.stage.stages.append(get_health_check_config(repo_conf))
    cached: List[str] = []
    # Convert each stage in the task configuration
    for task_stage in task_conf.stages:
        executor_with_config, cached = get_executor_with_config(task_stage, cached)
        conf_stage = get_conf_stage(task_stage, executor_with_config)
        conf_stage = fix_result_detail(task_stage, conf_stage)
        conf_stage = fix_dummy(task_stage, conf_stage)
        conf_stage = fix_keyword(task_stage, conf_stage)
        conf_stage = fix_file(task_stage, conf_stage)
        conf_stage = fix_diff(task_stage, conf_stage, task_conf)
        result_conf.stage.stages.append(conf_stage)
```
it is
```python
    for task_stage in task_conf.stages:
        executor_with_config, cached = get_executor_with_config(task_stage, cached)
```
this is a loop, so this `cached` will be updated in every round of stage 
				
					
						张泊明518370910136
						commented  The return value is unnecessary. The return value is unnecessary. 
				
					
						李衍志523370910113
						commented  I have a lazing coding style here, everything has get imported would get exported, so should maintain this until the end of the loop. Everything is exported in previous stage would be imported in the next stage. I have a lazing coding style here, everything has get imported would get exported, so should maintain this until the end of the loop. Everything is exported in previous stage would be imported in the next stage. 
				
					
						张泊明518370910136
						commented  
 1. The return value is unnecessary
2. It should be a `set` 
				
					
						张泊明518370910136
						commented  try it yourself try it yourself 
				
					
						李衍志523370910113
						commented  I see why I see why 
				
					
						李衍志523370910113
						commented  resolved. resolved. | ||||
|         stage=result.Stage( | ||||
|             stages=[], | ||||
|             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 | ||||
| 
 | ||||
| 
 | ||||
| # FIXME: LLM generated convert function, only for demostration | ||||
| def convert_joj1(joj1_conf: joj1.Config) -> task.Config: | ||||
|     stages = [] | ||||
|     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 | ||||
|     ) | ||||
| 
 | ||||
|     stages = [get_joj1_run_stage(joj1_conf)] | ||||
|     return task.Config( | ||||
|         task=task.Task( | ||||
|             name=( | ||||
|                 joj1_conf.languages[0].language | ||||
|                 if joj1_conf.languages | ||||
|                 else "Unnamed Task" | ||||
|             ), | ||||
|             type_="", | ||||
|         ),  # FIXME: fix this type later | ||||
|         release=task.Release(deadline=release_deadline), | ||||
|             name=("Blank Task"), | ||||
|         ), | ||||
|         release=task.Release(deadline=None), | ||||
|         stages=stages, | ||||
|     ) | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,7 +3,6 @@ import os | |||
| from pathlib import Path | ||||
| from typing import Any, Dict | ||||
| 
 | ||||
| import inquirer | ||||
| import rtoml | ||||
| import typer | ||||
| import yaml | ||||
|  | @ -16,23 +15,6 @@ from joj3_config_generator.utils.logger import logger | |||
| 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() | ||||
| 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_model = joj1.Config(**joj1_obj) | ||||
|     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)) | ||||
| 
 | ||||
| 
 | ||||
| @app.command() | ||||
| def convert(root: Path = Path(".")) -> Dict[str, Any]: | ||||
|     """ | ||||
|     Convert given dir of JOJ3 toml config files to JOJ3 json config files | ||||
|     """ | ||||
| def convert( | ||||
|     root: Path = typer.Option( | ||||
|         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()}") | ||||
|     repo_toml_path = os.path.join(root.absolute(), "basic", "repo.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) | ||||
|         result_file.write("\n") | ||||
| 
 | ||||
|     # FIXME: change the path to the server | ||||
|     # homework_name = "h8" | ||||
|     # 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}" | ||||
|     # distribution on json | ||||
|     # need a get folder path function | ||||
| 
					
					jon-lee marked this conversation as resolved
					
				 
				
					
						张泊明518370910136
						commented  why? why? 
				
					
						李衍志523370910113
						commented  fixed fixed | ||||
|     # distribute_json(folder_path, repo_obj) | ||||
|     return result_dict | ||||
|  |  | |||
|  | @ -86,8 +86,7 @@ class Stage(BaseModel): | |||
|     class Config: | ||||
|         extra = "allow" | ||||
| 
					
					jon-lee marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						李衍志523370910113
						commented  this should be the  this should be the `StrEnum` 
				
					
						张泊明518370910136
						commented  yes yes 
				
					
						李衍志523370910113
						commented  It is supported now. It is supported now. | ||||
| 
 | ||||
|     @root_validator(pre=True) | ||||
|     def gather_cases(cls: Type["Stage"], values: Dict[str, Any]) -> Dict[str, Any]: | ||||
|     def gather_cases(self, values: Dict[str, Any]) -> Dict[str, Any]: | ||||
|         cases = {k: v for k, v in values.items() if k.startswith("case")} | ||||
|         for key in cases: | ||||
|             values.pop(key) | ||||
|  | @ -108,5 +107,5 @@ class Task(BaseModel): | |||
| 
 | ||||
| class Config(BaseModel): | ||||
|     task: Task | ||||
|     release: Release  # Release configuration | ||||
|     release: Release | ||||
|     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 | ||||
| 
					
					jon-lee marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						张泊明518370910136
						commented  is it added to pyproject.toml? is it added to pyproject.toml? 
				
					
						李衍志523370910113
						commented  now added now added | ||||
| from pytimeparse.timeparse import timeparse | ||||
| 
 | ||||
| from joj3_config_generator.models import joj1, result, task | ||||
| 
 | ||||
| 
 | ||||
| 
					
					jon-lee marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						张泊明518370910136
						commented  just use  just use `humanfriendly.parse_timespan` 
				
					
						李衍志523370910113
						commented  seems outdated, mark as resolved. seems outdated, mark as resolved. | ||||
| 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( | ||||
|                     args=shlex.split(args_), | ||||
|                     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 | ||||
|                 ), | ||||
|                 cases=[], | ||||
|  | @ -72,7 +72,7 @@ def get_debug_args(repo_conf: repo.Config) -> str: | |||
|     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 = "" | ||||
|     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( | ||||
|                         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=[ | ||||
|             result.ParserConfig(name="healthcheck", with_={"score": 1}), | ||||
|             result.ParserConfig(name="debug", with_={"score": 1}), | ||||
|             result.ParserConfig(name="debug", with_={"score": 0}), | ||||
|         ], | ||||
|     ) | ||||
|     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() | ||||
|     project_root = current_file_path.parents[2] | ||||
|     file_path = f"{project_root}/tests/immutable_p3-test/" | ||||
|     # default value as hardcoded | ||||
|     # file_path = "{Path.home()}/.cache/immutable" | ||||
|     immutable_hash = [] | ||||
|     for i, file in enumerate(immutable_files): | ||||
|         immutable_files[i] = file_path + file.rsplit("/", 1)[-1] | ||||
|  |  | |||
|  | @ -239,6 +239,7 @@ def fix_file( | |||
|     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( | ||||
|     task_stage: task.Stage, conf_stage: result.StageDetail, task_conf: task.Config | ||||
| ) -> result.StageDetail: | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,26 +1,10 @@ | |||
| # general task configuration | ||||
| 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.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]] | ||||
| name = "Compilation" | ||||
| command = "./tools/compile" # eg. script running cmake commands | ||||
|  |  | |||
|  | @ -1,31 +1,25 @@ | |||
| task = "cc" | ||||
| 
 | ||||
| [[stages]] | ||||
| name = "cc" | ||||
| command = "run cc" | ||||
| name = "This is the converted joj1 run stage" | ||||
| group = "joj" | ||||
| score = 100 | ||||
| parsers = [] | ||||
| parsers = ["diff", "result-status"] | ||||
| skip = [] | ||||
| 
 | ||||
| [stages.files] | ||||
| import = [] | ||||
| export = [] | ||||
| 
 | ||||
| [stages.limit] | ||||
| mem = 4 | ||||
| cpu = 4 | ||||
| stderr = 4 | ||||
| stdout = 4 | ||||
| mem = 32000000 | ||||
| cpu = 1 | ||||
| stderr = 800 | ||||
| stdout = 800 | ||||
| 
 | ||||
| [stages.dummy] | ||||
| comment = "" | ||||
| score = 0 | ||||
| forcequit = true | ||||
| forcequit = false | ||||
| 
 | ||||
| [stages.result-status] | ||||
| comment = "" | ||||
| score = 0 | ||||
| forcequit = true | ||||
| forcequit = false | ||||
| 
 | ||||
| [stages.keyword] | ||||
| keyword = [] | ||||
|  | @ -49,70 +43,566 @@ mem = true | |||
| stdout = false | ||||
| stderr = false | ||||
| exitstatus = false | ||||
| [stages.diff.output] | ||||
| score = 0 | ||||
| ignorespaces = false | ||||
| hide = false | ||||
| forcequit = true | ||||
| 
 | ||||
| [stages.cases] | ||||
| 
 | ||||
| [[stages]] | ||||
| name = "c" | ||||
| command = "run c" | ||||
| score = 100 | ||||
| [stages.file] | ||||
| [stages.cases.case0] | ||||
| command = "-abcd --aaaa bbbb" | ||||
| in = "case0.in" | ||||
| out = "case0.out" | ||||
| score = 10 | ||||
| parsers = [] | ||||
| skip = [] | ||||
| 
 | ||||
| [stages.files] | ||||
| import = [] | ||||
| export = [] | ||||
| [stages.cases.case0.limit] | ||||
| mem = 32000000 | ||||
| cpu = 1 | ||||
| stderr = 800 | ||||
| stdout = 800 | ||||
| 
 | ||||
| [stages.limit] | ||||
| mem = 4 | ||||
| cpu = 4 | ||||
| stderr = 4 | ||||
| stdout = 4 | ||||
| 
 | ||||
| [stages.dummy] | ||||
| [stages.cases.case0.dummy] | ||||
| comment = "" | ||||
| score = 0 | ||||
| forcequit = true | ||||
| forcequit = false | ||||
| 
 | ||||
| [stages.result-status] | ||||
| [stages.cases.case0.result-status] | ||||
| comment = "" | ||||
| score = 0 | ||||
| forcequit = true | ||||
| forcequit = false | ||||
| 
 | ||||
| [stages.keyword] | ||||
| [stages.cases.case0.keyword] | ||||
| keyword = [] | ||||
| weight = [] | ||||
| 
 | ||||
| [stages.clangtidy] | ||||
| [stages.cases.case0.clangtidy] | ||||
| keyword = [] | ||||
| weight = [] | ||||
| 
 | ||||
| [stages.cppcheck] | ||||
| [stages.cases.case0.cppcheck] | ||||
| keyword = [] | ||||
| weight = [] | ||||
| 
 | ||||
| [stages.cpplint] | ||||
| [stages.cases.case0.cpplint] | ||||
| keyword = [] | ||||
| weight = [] | ||||
| 
 | ||||
| [stages.result-detail] | ||||
| [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 = false | ||||
| ignorespaces = true | ||||
| hide = false | ||||
| forcequit = true | ||||
| forcequit = false | ||||
| 
 | ||||
| [stages.cases] | ||||
| [task] | ||||
| type = "" | ||||
| name = "Blank Task" | ||||
| 
 | ||||
| [release] | ||||
| deadline = "null" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	
Make this
Path.home()default to/home/tt. For now, create a const for this dir.fixed