From 7fa19c3cb97bb6b8562e9ff2f00587984d2b821a Mon Sep 17 00:00:00 2001 From: BoYanZh Date: Tue, 28 Sep 2021 15:35:27 +0800 Subject: [PATCH] feat: list no collaborator/commit repos --- joint_teapot/__main__.py | 14 +++++++++++-- joint_teapot/teapot.py | 6 ++++++ joint_teapot/workers/canvas.py | 2 +- joint_teapot/workers/gitea.py | 36 ++++++++++++++++++++++++++++++---- 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/joint_teapot/__main__.py b/joint_teapot/__main__.py index c3783ee..b0f7526 100644 --- a/joint_teapot/__main__.py +++ b/joint_teapot/__main__.py @@ -32,7 +32,7 @@ def create_teams_and_repos_by_canvas_groups() -> None: teapot.create_teams_and_repos_by_canvas_groups() -@app.command("get-public-keys", help="get all public keys on gitea") +@app.command("get-public-keys", help="list all public keys on gitea") def get_public_key_of_all_canvas_students() -> None: echo("\n".join(teapot.get_public_key_of_all_canvas_students())) @@ -53,7 +53,7 @@ def check_exist_issue_by_title(repo_names: List[str], title: str) -> None: @app.command( - "get-releases", + "checkout-releases", help="checkout git repo to git tag fetched from gitea by release name, with due date", ) def checkout_to_repos_by_release_name( @@ -74,6 +74,16 @@ def archieve_all_repos() -> None: teapot.archieve_all_repos() +@app.command("get-no-collaborator-repos", help="list all repos with no collaborators") +def get_no_collaborator_repos() -> None: + teapot.get_no_collaborator_repos() + + +@app.command("get-no-commit-repos", help="list all repos with no commit") +def get_no_commit_repos() -> None: + teapot.get_no_commit_repos() + + if __name__ == "__main__": try: app() diff --git a/joint_teapot/teapot.py b/joint_teapot/teapot.py index d176701..41678b7 100644 --- a/joint_teapot/teapot.py +++ b/joint_teapot/teapot.py @@ -122,6 +122,12 @@ class Teapot: def archieve_all_repos(self) -> None: self.gitea.archieve_all_repos() + def get_no_collaborator_repos(self) -> None: + self.gitea.get_no_collaborator_repos() + + def get_no_commit_repos(self) -> None: + self.gitea.get_no_commit_repos() + if __name__ == "__main__": teapot = Teapot() diff --git a/joint_teapot/workers/canvas.py b/joint_teapot/workers/canvas.py index 99f1f38..2ec8330 100644 --- a/joint_teapot/workers/canvas.py +++ b/joint_teapot/workers/canvas.py @@ -16,7 +16,7 @@ class Canvas: self.course = self.canvas.get_course(course_id) logger.info(f"Canvas course loaded. {self.course}") self.students = self.course.get_users( - enrollment_type=["student"], include=["email"] + enrollment_type=["student", "observer"], include=["email"] ) for attr in ["sis_login_id", "sortable_name", "name"]: if not hasattr(self.students[0], attr): diff --git a/joint_teapot/workers/gitea.py b/joint_teapot/workers/gitea.py index 6154da7..8799cdf 100644 --- a/joint_teapot/workers/gitea.py +++ b/joint_teapot/workers/gitea.py @@ -124,11 +124,13 @@ class Gitea: repo = self.organization_api.create_org_repo( self.org_name, body=body ) - logger.info(f"Personal repo {repo_name} for {student} created") + logger.info( + f"Personal repo {self.org_name}/{repo_name} for {student} created" + ) except ApiException as e: if e.status == 409: logger.warning( - f"Personal repo {repo_name} for {student} already exists" + f"Personal repo {self.org_name}/{repo_name} for {student} already exists" ) else: raise (e) @@ -230,6 +232,33 @@ class Gitea: for data in list_all(self.organization_api.org_list_repos, self.org_name) ] + def get_no_collaborator_repos(self) -> List[str]: + res = [] + for data in list_all(self.organization_api.org_list_repos, self.org_name): + collaborators = self.repository_api.repo_list_collaborators( + self.org_name, data.name + ) + if collaborators: + continue + logger.info(f"{self.org_name}/{data.name} has no collaborators") + res.append(data.name) + return res + + def get_no_commit_repos(self) -> List[str]: + res = [] + for data in list_all(self.organization_api.org_list_repos, self.org_name): + try: + commits = self.repository_api.repo_get_all_commits( + self.org_name, data.name + ) + except ApiException as e: + if e.status == 409: + logger.info(f"{self.org_name}/{data.name} has no commits") + res.append(data.name) + else: + raise (e) + return res + def create_issue( self, repo_name: str, @@ -280,5 +309,4 @@ class Gitea: if __name__ == "__main__": gitea = Gitea() - res = gitea.get_all_repo_names() - print("\n".join(res)) + res = gitea.get_no_commit_repos()