Support for migration of repositories

pull/22/head
laromicas 2023-03-22 20:47:43 -05:00
rodzic 3b8f04e31b
commit 75a9591b98
3 zmienionych plików z 83 dodań i 2 usunięć

Wyświetl plik

@ -15,7 +15,8 @@ from .apiobject import (
Milestone,
Commit,
Comment,
Content
Content,
MigrationServices
)
__all__ = [

Wyświetl plik

@ -324,6 +324,7 @@ class Branch(ReadonlyApiObject):
class Repository(ApiObject):
API_OBJECT = """/repos/{owner}/{name}""" # <owner>, <reponame>
REPO_MIGRATE = """/repos/migrate"""
REPO_IS_COLLABORATOR = """/repos/%s/%s/collaborators/%s""" # <owner>, <reponame>, <username>
REPO_SEARCH = """/repos/search/%s""" # <reponame>
REPO_BRANCHES = """/repos/%s/%s/branches""" # <owner>, <reponame>
@ -575,6 +576,65 @@ class Repository(ApiObject):
)
self.deleted = True
def migrate_repo(
self,
service: str,
clone_addr: str,
repo_name: str,
description: str = "",
private: bool = False,
auth_token: str = None,
auth_username: str = None,
auth_password: str = None,
mirror: bool = False,
mirror_interval: str = None,
lfs: bool = False,
lfs_endpoint: str = "",
wiki: bool = True,
labels: bool = False,
issues: bool = False,
pull_requests: bool = True,
releases: bool = True,
milestones: bool = True,
repo_owner: str = None
):
""" Migrate a Repository from another service.
Throws:
AlreadyExistsException: If the Repository exists already.
Exception: If something else went wrong.
"""
result = self.gitea.requests_post(
Repository.REPO_MIGRATE,
data={
"auth_password": auth_password,
"auth_token": auth_token,
"auth_username": auth_username,
"clone_addr": clone_addr,
"description": description,
"issues": issues,
"labels": labels,
"lfs": lfs,
"lfs_endpoint": lfs_endpoint,
"milestones": milestones,
"mirror": mirror,
"mirror_interval": mirror_interval,
"private": private,
"pull_requests": pull_requests,
"releases": releases,
"repo_name": repo_name,
"repo_owner": repo_owner,
"service": service,
"wiki": wiki
}
)
if "id" in result:
self.gitea.logger.info("Successfully created Job to Migrate Repository %s " % result["name"])
else:
self.gitea.logger.error(result["message"])
raise Exception("Repository not Migrated... (gitea: %s)" % result["message"])
return Repository.parse_response(self, result)
class Milestone(ApiObject):
API_OBJECT = """/repos/{owner}/{repo}/milestones/{number}""" # <owner, repo>
@ -853,3 +913,13 @@ class Util:
return datetime.strptime(time[:-3] + "00", "%Y-%m-%dT%H:%M:%S%z")
except ValueError:
return datetime.strptime(time[:-3] + "00", "%Y-%m-%dT%H:%M:%S")
class MigrationServices:
GIT = "1"
GITHUB = "2"
GITEA = "3"
GITLAB = "4"
GOGS = "5"
ONEDEV = "6"
BITBUCKET = "7"
CODEBASE = "8"

Wyświetl plik

@ -3,7 +3,7 @@ import base64
import pytest
import uuid
from gitea import Gitea, User, Organization, Team, Repository, Issue, Milestone
from gitea import Gitea, User, Organization, Team, Repository, Issue, Milestone, MigrationServices
from gitea import NotFoundException, AlreadyExistsException
# put a ".token" file into your directory containg only the token for gitea
@ -386,3 +386,13 @@ def test_delete_user(instance):
user.delete()
with pytest.raises(NotFoundException) as e:
User.request(instance, user_name)
def test_migrate_repo(instance):
service = Repository(instance)
repo = service.migrate_repo(MigrationServices.GITEA, "https://gitea.com/gitea/awesome-gitea.git", test_repo, "user owned repo")
assert repo.name == test_repo
assert repo.description == "user owned repo"
assert not repo.private
assert repo.owner.username == "test"
repo = Repository.request(instance, "test", test_repo)
repo.delete()