From 23d59cb987ecab7e55598ac6c617cd1b28db57a2 Mon Sep 17 00:00:00 2001 From: Gianni Date: Wed, 16 Mar 2022 14:17:19 +0100 Subject: [PATCH] Feature/private repos and bugfix (#1) * use regex replace for invalid chars, import private correctly, reduce logging information. Import as import, not migration * remove comment * fix: regex for replacing project name at correct position * print finished state Co-authored-by: Gianni --- main.py | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/main.py b/main.py index 259db7f..fcc755e 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,7 @@ import requests import json import sys import logging +import re #test commit @@ -33,7 +34,10 @@ def getGiteaOrganizationID(orgName): def startRepoMigration(cloneUrl, repoName, projectName): """ we're now have all, that we need, let's start migration """ print("\nstarting migration of %s......\n" % (repoName)) + print("\nstarting migration at %s......\n" % (cloneUrl)) logging.info("starting migration of %s......" % (repoName)) + logging.info("starting migration at %s......" % (cloneUrl)) + GiteaRepoAPIurl = props.GiteaURL + '/api/v1/repos/migrate' uid = getGiteaOrganizationID(projectName) @@ -42,16 +46,16 @@ def startRepoMigration(cloneUrl, repoName, projectName): "auth_username": props.migrationUsername, "clone_addr": cloneUrl, # "description": "string", - "issues": True, - "labels": True, - "milestones": True, - "mirror": True, + "issues": False, + "labels": False, + "milestones": False, + "mirror": False, "private": True, - "pull_requests": True, - "releases": True, + "pull_requests": False, + "releases": False, "repo_name": repoName, "uid": uid, - "wiki": True + "wiki": False } try: startRepoMigrationresponse = requests.post(GiteaRepoAPIurl, json = repoPostData, headers = headersGitea) @@ -79,8 +83,12 @@ def createGiteaOrganization(projectName, fullName, description): createGiteaOrganizationresponse = requests.post(GiteaOrgsAPIurl, json = orgPostData, headers = headersGitea) createGiteaOrganizationresponse.raise_for_status() except Exception as e: - print("Exception: %s \n Response: %s" % (e, createGiteaOrganizationresponse.text)) - logging.error("Exception: %s \n Response: %s" % (e, createGiteaOrganizationresponse.text)) + if "user already exists" not in createGiteaOrganizationresponse.text: + print("Exception: %s \n Response: %s" % (e, createGiteaOrganizationresponse.text)) + logging.error("Exception: %s \n Response: %s" % (e, createGiteaOrganizationresponse.text)) + else: + print("Skipping %s \n " % (projectName)) + logging.info("Skipping %s \n " % (projectName)) else: print("Response: %s" % (createGiteaOrganizationresponse.text)) logging.info("Response: %s" % (createGiteaOrganizationresponse.text)) @@ -97,13 +105,21 @@ def getReposBB(): else: reposJson = json.loads(response.text)['values'] for repo in reposJson: - repoName = repo['name'] - projectName = repo['project']['name'] + repoName = re.sub('[^A-Za-z0-9\-\.]+', '', repo['name']).lower() + if repo['project']['type'] == 'PERSONAL': + projectName = repo['project']['key'] + print("Personal project: " + projectName) + logging.info("Personal project: " + projectName) + else: + projectName = repo['project']['name'] try: description = repo['project']['description'] except KeyError: description = 'None' - cloneLink = props.BitBucketURL + "/scm/" + projectName + "/" + repoName + ".git" + for cloneLinks in repo['links']['clone']: + if cloneLinks['name'] == "http": + cloneLink = cloneLinks['href'] + projectName = re.sub('[^A-Za-z0-9]+', '', projectName) print("Migrating: repo: %s with description: %s from project: %s via clonelink: %s" % (repoName, description, projectName, cloneLink)) logging.info("Migrating: repo: %s with description: %s from project: %s via clonelink: %s" % (repoName, description, projectName, cloneLink)) @@ -115,5 +131,6 @@ def getReposBB(): def main(): getReposBB() - + logging.info("Migration finished") + print("Migration finished") main()