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 <g.montalto@sprinteins.com>
This commit is contained in:
Gianni 2022-03-16 14:17:19 +01:00 committed by GitHub
parent d3a20d630a
commit 23d59cb987
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

37
main.py
View file

@ -3,6 +3,7 @@ import requests
import json import json
import sys import sys
import logging import logging
import re
#test commit #test commit
@ -33,7 +34,10 @@ def getGiteaOrganizationID(orgName):
def startRepoMigration(cloneUrl, repoName, projectName): def startRepoMigration(cloneUrl, repoName, projectName):
""" we're now have all, that we need, let's start migration """ """ we're now have all, that we need, let's start migration """
print("\nstarting migration of %s......\n" % (repoName)) 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 of %s......" % (repoName))
logging.info("starting migration at %s......" % (cloneUrl))
GiteaRepoAPIurl = props.GiteaURL + '/api/v1/repos/migrate' GiteaRepoAPIurl = props.GiteaURL + '/api/v1/repos/migrate'
uid = getGiteaOrganizationID(projectName) uid = getGiteaOrganizationID(projectName)
@ -42,16 +46,16 @@ def startRepoMigration(cloneUrl, repoName, projectName):
"auth_username": props.migrationUsername, "auth_username": props.migrationUsername,
"clone_addr": cloneUrl, "clone_addr": cloneUrl,
# "description": "string", # "description": "string",
"issues": True, "issues": False,
"labels": True, "labels": False,
"milestones": True, "milestones": False,
"mirror": True, "mirror": False,
"private": True, "private": True,
"pull_requests": True, "pull_requests": False,
"releases": True, "releases": False,
"repo_name": repoName, "repo_name": repoName,
"uid": uid, "uid": uid,
"wiki": True "wiki": False
} }
try: try:
startRepoMigrationresponse = requests.post(GiteaRepoAPIurl, json = repoPostData, headers = headersGitea) 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 = requests.post(GiteaOrgsAPIurl, json = orgPostData, headers = headersGitea)
createGiteaOrganizationresponse.raise_for_status() createGiteaOrganizationresponse.raise_for_status()
except Exception as e: except Exception as e:
if "user already exists" not in createGiteaOrganizationresponse.text:
print("Exception: %s \n Response: %s" % (e, createGiteaOrganizationresponse.text)) print("Exception: %s \n Response: %s" % (e, createGiteaOrganizationresponse.text))
logging.error("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: else:
print("Response: %s" % (createGiteaOrganizationresponse.text)) print("Response: %s" % (createGiteaOrganizationresponse.text))
logging.info("Response: %s" % (createGiteaOrganizationresponse.text)) logging.info("Response: %s" % (createGiteaOrganizationresponse.text))
@ -97,13 +105,21 @@ def getReposBB():
else: else:
reposJson = json.loads(response.text)['values'] reposJson = json.loads(response.text)['values']
for repo in reposJson: for repo in reposJson:
repoName = repo['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'] projectName = repo['project']['name']
try: try:
description = repo['project']['description'] description = repo['project']['description']
except KeyError: except KeyError:
description = 'None' 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)) 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)) 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(): def main():
getReposBB() getReposBB()
logging.info("Migration finished")
print("Migration finished")
main() main()