feat: git
This commit is contained in:
parent
5c1b1b4b19
commit
baa7ed089d
|
@ -1,5 +1,31 @@
|
||||||
|
import os
|
||||||
|
|
||||||
import git
|
import git
|
||||||
|
|
||||||
|
from joint_teapot.config import settings
|
||||||
|
|
||||||
|
|
||||||
class Git:
|
class Git:
|
||||||
...
|
def __init__(self, org_name: str = settings.org_name, repos_dir: str = ""):
|
||||||
|
self.org_name = org_name
|
||||||
|
if not os.path.isdir(repos_dir):
|
||||||
|
raise Exception(f"{repos_dir} does not exist! Create it first.")
|
||||||
|
self.repos_dir = repos_dir
|
||||||
|
|
||||||
|
def __get_repo(self, repo_name: str) -> git.Repo:
|
||||||
|
repo_dir = os.path.join(self.repos_dir, repo_name)
|
||||||
|
if os.path.exists(repo_dir):
|
||||||
|
return git.Repo(repo_dir)
|
||||||
|
return git.Repo.clone_from(
|
||||||
|
f"https://focs.ji.sjtu.edu.cn/git/{self.org_name}/{repo_name}",
|
||||||
|
repo_dir,
|
||||||
|
branch="master",
|
||||||
|
)
|
||||||
|
|
||||||
|
def repo_checkout_to_tag(self, repo_name: str, tag_name: str) -> str:
|
||||||
|
repo = self.__get_repo(repo_name)
|
||||||
|
repo.git.fetch("--tags", "--all", "-f")
|
||||||
|
repo.git.reset("--hard", f"origin/master")
|
||||||
|
repo.git.clean("-d", "-f", "-x")
|
||||||
|
repo.git.checkout(f"tags/{tag_name}")
|
||||||
|
return os.path.join(self.repos_dir, repo_name)
|
||||||
|
|
|
@ -68,9 +68,13 @@ class Gitea:
|
||||||
repo_name_convertor: Callable[
|
repo_name_convertor: Callable[
|
||||||
[User], Optional[str]
|
[User], Optional[str]
|
||||||
] = default_repo_name_convertor,
|
] = default_repo_name_convertor,
|
||||||
) -> None:
|
) -> List[str]:
|
||||||
|
repo_names = []
|
||||||
for student in students:
|
for student in students:
|
||||||
repo_name = repo_name_convertor(student)
|
repo_name = repo_name_convertor(student)
|
||||||
|
if repo_name is None:
|
||||||
|
continue
|
||||||
|
repo_names.append(repo_name)
|
||||||
repo: Dict[str, Any] = self.organization_api.create_org_repo(
|
repo: Dict[str, Any] = self.organization_api.create_org_repo(
|
||||||
self.org_name,
|
self.org_name,
|
||||||
body={
|
body={
|
||||||
|
@ -87,6 +91,7 @@ class Gitea:
|
||||||
repo["name"],
|
repo["name"],
|
||||||
self.__get_username_by_student_id(student.sis_login_id),
|
self.__get_username_by_student_id(student.sis_login_id),
|
||||||
)
|
)
|
||||||
|
return repo_names
|
||||||
|
|
||||||
def create_teams_and_repos_by_canvas_groups(
|
def create_teams_and_repos_by_canvas_groups(
|
||||||
self,
|
self,
|
||||||
|
@ -95,13 +100,15 @@ class Gitea:
|
||||||
team_name_convertor: Callable[[str], Optional[str]] = lambda name: name,
|
team_name_convertor: Callable[[str], Optional[str]] = lambda name: name,
|
||||||
repo_name_convertor: Callable[[str], Optional[str]] = lambda name: name,
|
repo_name_convertor: Callable[[str], Optional[str]] = lambda name: name,
|
||||||
permission: PermissionEnum = PermissionEnum.write,
|
permission: PermissionEnum = PermissionEnum.write,
|
||||||
) -> None:
|
) -> List[str]:
|
||||||
|
repo_names = []
|
||||||
group: Group
|
group: Group
|
||||||
for group in groups:
|
for group in groups:
|
||||||
team_name = team_name_convertor(group.name)
|
team_name = team_name_convertor(group.name)
|
||||||
repo_name = repo_name_convertor(group.name)
|
repo_name = repo_name_convertor(group.name)
|
||||||
if team_name is None or repo_name is None:
|
if team_name is None or repo_name is None:
|
||||||
continue
|
continue
|
||||||
|
repo_names.append(repo_name)
|
||||||
team: Dict[str, Any] = self.organization_api.org_create_team(
|
team: Dict[str, Any] = self.organization_api.org_create_team(
|
||||||
self.org_name,
|
self.org_name,
|
||||||
body={
|
body={
|
||||||
|
@ -145,6 +152,7 @@ class Gitea:
|
||||||
self.organization_api.org_add_team_member(
|
self.organization_api.org_add_team_member(
|
||||||
team["id"], self.__get_username_by_student_id(student.sis_login_id)
|
team["id"], self.__get_username_by_student_id(student.sis_login_id)
|
||||||
)
|
)
|
||||||
|
return repo_names
|
||||||
|
|
||||||
def get_public_key_of_students(
|
def get_public_key_of_students(
|
||||||
self, students: PaginatedList
|
self, students: PaginatedList
|
||||||
|
|
Loading…
Reference in New Issue
Block a user