adding functionality to move repos to other orgs (see #9)

pull/11/head
Langenfeld 2021-11-05 11:47:08 +01:00
rodzic bd2371b1b6
commit 8f5f22842b
2 zmienionych plików z 21 dodań i 2 usunięć

Wyświetl plik

@ -1,7 +1,7 @@
import json
import logging
from datetime import datetime
from typing import List, Tuple, Dict, Sequence, Optional
from typing import List, Tuple, Dict, Sequence, Optional, Union
import requests
from httpcache import CachingHTTPAdapter
@ -236,6 +236,7 @@ class Repository(GiteaApiObject):
REPO_TIMES = """/repos/%s/%s/times""" # <owner>, <reponame>
REPO_USER_TIME = """/repos/%s/%s/times/%s""" # <owner>, <reponame>, <username>
REPO_COMMITS = "/repos/%s/%s/commits" # <owner>, <reponame>
REPO_TRANSFER = "/repos/{owner}/{repo}/transfer"
def __init__(self, gitea, id: int):
super(Repository, self).__init__(gitea, id=id)
@ -400,13 +401,20 @@ class Repository(GiteaApiObject):
url = f"/repos/{self.owner.username}/{self.name}/collaborators/{user_name}"
self.gitea.requests_delete(url)
def transfer_ownership(self, new_owner: Union["User","Organization"], new_teams: List["Team"]):
url = Repository.REPO_TRANSFER.format(owner = self.owner.username, repo = self.name)
new_team_ids = [team.id for team in new_teams if isinstance(new_owner,User) or team in new_owner.get_teams()]
self.gitea.requests_post(
url, data={"new_owner": new_owner.username, "team_ids": new_team_ids}
)
#TODO: make sure this instance is either updated or discarded
def delete(self):
self.gitea.requests_delete(
Repository.REPO_DELETE % (self.owner.username, self.name)
)
self.deleted = True
class Milestone(GiteaApiObject):
GET_API_OBJECT = (
"""/repos/{owner}/{repo}/milestones/{number}""" # <owner, repo, id>

Wyświetl plik

@ -207,6 +207,17 @@ def test_delete_repo_orgowned(instance):
Repository.request(instance, test_user, test_repo)
def test_change_repo_ownership(instance):
old_org = Organization.request(instance, test_org)
user = User.request(instance, test_user)
new_org = instance.create_org(user,test_org+"_repomove", "Org for testing moving repositories")
new_team = instance.create_team(new_org, test_team + "_repomove", "descr")
repo = instance.create_repo(old_org, test_repo+"_repomove", "descr")
repo.transfer_ownership(new_org, [new_team])
assert len(new_org.get_teams()) > 1
assert test_repo + "_repomove" in [team.name for team in new_org.get_repositories()]
def test_delete_team(instance):
org = Organization.request(instance, test_org)
team = org.get_team(test_team)