forked from JOJ/Joint-Teapot
		
	feat: file lock on git operation
This commit is contained in:
		
							parent
							
								
									afb5d82421
								
							
						
					
					
						commit
						940112e696
					
				|  | @ -3,6 +3,7 @@ from datetime import datetime | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| from typing import List | from typing import List | ||||||
| 
 | 
 | ||||||
|  | from filelock import FileLock | ||||||
| from git import Repo | from git import Repo | ||||||
| from typer import Argument, Option, Typer, echo | from typer import Argument, Option, Typer, echo | ||||||
| 
 | 
 | ||||||
|  | @ -249,6 +250,10 @@ def joj3_scoreboard( | ||||||
|     logger.info(f"debug log to file: {settings.log_file_path}") |     logger.info(f"debug log to file: {settings.log_file_path}") | ||||||
|     if joj3.check_skipped(score_file_path, "skip-scoreboard"): |     if joj3.check_skipped(score_file_path, "skip-scoreboard"): | ||||||
|         return |         return | ||||||
|  |     lock = FileLock( | ||||||
|  |         settings.joj3_lock_file_path, timeout=settings.joj3_lock_file_timeout | ||||||
|  |     ) | ||||||
|  |     with lock.acquire(): | ||||||
|         repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading") |         repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading") | ||||||
|         repo: Repo = tea.pot.git.get_repo(repo_name) |         repo: Repo = tea.pot.git.get_repo(repo_name) | ||||||
|         if "grading" not in repo.remote().refs: |         if "grading" not in repo.remote().refs: | ||||||
|  | @ -276,7 +281,9 @@ def joj3_scoreboard( | ||||||
|             + f"{settings.gitea_org_name}/{submitter_repo_name}@{commit_hash}\n\n" |             + f"{settings.gitea_org_name}/{submitter_repo_name}@{commit_hash}\n\n" | ||||||
|             + f"gitea actions link: {actions_link}" |             + f"gitea actions link: {actions_link}" | ||||||
|         ) |         ) | ||||||
|     tea.pot.git.add_commit_and_push(repo_name, [scoreboard_file_name], commit_message) |         tea.pot.git.add_commit_and_push( | ||||||
|  |             repo_name, [scoreboard_file_name], commit_message | ||||||
|  |         ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @app.command( | @app.command( | ||||||
|  | @ -318,6 +325,10 @@ def joj3_failed_table( | ||||||
|     logger.info(f"debug log to file: {settings.log_file_path}") |     logger.info(f"debug log to file: {settings.log_file_path}") | ||||||
|     if joj3.check_skipped(score_file_path, "skip-failed-table"): |     if joj3.check_skipped(score_file_path, "skip-failed-table"): | ||||||
|         return |         return | ||||||
|  |     lock = FileLock( | ||||||
|  |         settings.joj3_lock_file_path, timeout=settings.joj3_lock_file_timeout | ||||||
|  |     ) | ||||||
|  |     with lock.acquire(): | ||||||
|         repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading") |         repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading") | ||||||
|         repo: Repo = tea.pot.git.get_repo(repo_name) |         repo: Repo = tea.pot.git.get_repo(repo_name) | ||||||
|         if "grading" not in repo.remote().refs: |         if "grading" not in repo.remote().refs: | ||||||
|  |  | ||||||
|  | @ -35,9 +35,13 @@ class Settings(BaseSettings): | ||||||
|         "charlem", |         "charlem", | ||||||
|     ] |     ] | ||||||
| 
 | 
 | ||||||
|     # sid |     # joj | ||||||
|     joj_sid: str = "" |     joj_sid: str = "" | ||||||
| 
 | 
 | ||||||
|  |     # joj3 | ||||||
|  |     joj3_lock_file_path: str = ".git/teapot.lock" | ||||||
|  |     joj3_lock_file_timeout: int = 30 | ||||||
|  | 
 | ||||||
|     # log file |     # log file | ||||||
|     log_file_path: str = "joint-teapot.log" |     log_file_path: str = "joint-teapot.log" | ||||||
|     stderr_log_level: str = "INFO" |     stderr_log_level: str = "INFO" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| canvasapi>=2.2.0 | canvasapi>=2.2.0 | ||||||
| colorama>=0.4.6 | colorama>=0.4.6 | ||||||
|  | filelock>=3.14.0 | ||||||
| focs_gitea>=1.22.0 | focs_gitea>=1.22.0 | ||||||
| GitPython>=3.1.18 | GitPython>=3.1.18 | ||||||
| joj-submitter>=0.0.8 | joj-submitter>=0.0.8 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user