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