forked from JOJ/Joint-Teapot
		
	feat: git
This commit is contained in:
		
							parent
							
								
									5c1b1b4b19
								
							
						
					
					
						commit
						baa7ed089d
					
				|  | @ -1,5 +1,31 @@ | |||
| import os | ||||
| 
 | ||||
| import git | ||||
| 
 | ||||
| from joint_teapot.config import settings | ||||
| 
 | ||||
| 
 | ||||
| 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[ | ||||
|             [User], Optional[str] | ||||
|         ] = default_repo_name_convertor, | ||||
|     ) -> None: | ||||
|     ) -> List[str]: | ||||
|         repo_names = [] | ||||
|         for student in students: | ||||
|             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( | ||||
|                 self.org_name, | ||||
|                 body={ | ||||
|  | @ -87,6 +91,7 @@ class Gitea: | |||
|                 repo["name"], | ||||
|                 self.__get_username_by_student_id(student.sis_login_id), | ||||
|             ) | ||||
|         return repo_names | ||||
| 
 | ||||
|     def create_teams_and_repos_by_canvas_groups( | ||||
|         self, | ||||
|  | @ -95,13 +100,15 @@ class Gitea: | |||
|         team_name_convertor: Callable[[str], Optional[str]] = lambda name: name, | ||||
|         repo_name_convertor: Callable[[str], Optional[str]] = lambda name: name, | ||||
|         permission: PermissionEnum = PermissionEnum.write, | ||||
|     ) -> None: | ||||
|     ) -> List[str]: | ||||
|         repo_names = [] | ||||
|         group: Group | ||||
|         for group in groups: | ||||
|             team_name = team_name_convertor(group.name) | ||||
|             repo_name = repo_name_convertor(group.name) | ||||
|             if team_name is None or repo_name is None: | ||||
|                 continue | ||||
|             repo_names.append(repo_name) | ||||
|             team: Dict[str, Any] = self.organization_api.org_create_team( | ||||
|                 self.org_name, | ||||
|                 body={ | ||||
|  | @ -145,6 +152,7 @@ class Gitea: | |||
|                 self.organization_api.org_add_team_member( | ||||
|                     team["id"], self.__get_username_by_student_id(student.sis_login_id) | ||||
|                 ) | ||||
|         return repo_names | ||||
| 
 | ||||
|     def get_public_key_of_students( | ||||
|         self, students: PaginatedList | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user