1
0
mirror of https://gitee.com/coder-xiaomo/gitee2github synced 2025-01-26 19:30:25 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
gitee2github/assets/repoMatching.py

112 lines
4.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import copy
def repoMatching(repo1, repo2):
# 对字典进行深拷贝
repo1 = copy.deepcopy(repo1)
repo2 = copy.deepcopy(repo2)
# 配对字典
matchList = {
'match': [],
'mismatch': {
'repo1': [],
'repo2': [],
},
}
# 定义映射决策
from .common import readJSON, fileExists
if fileExists("mapping.json"):
mapping = readJSON("mapping.json")
orgNameMap = mapping.get('orgNameMap')
repoNameMap = mapping.get('repoNameMap')
fullNameMap = mapping.get('fullNameMap')
else:
mapping = None # 不需要映射
def mapRepoName(fullName):
if mapping == None:
return fullName
elif fullName in fullNameMap.keys():
return fullNameMap.get(fullName)
else:
[orgName, repoName] = fullName.split('/')
if orgName in orgNameMap.keys():
orgName = orgNameMap.get(orgName)
if repoName in repoNameMap.keys():
repoName = repoNameMap.get(repoName)
return orgName + "/" + repoName
# # 测试
# print(mapRepoName("only4/thisisarepo"))
# print(mapRepoName("only-4/this-is-a-repo"))
# print(mapRepoName("only4/this-is-a-repo"))
# print(mapRepoName("only-4/thisisarepo"))
# print(mapRepoName("only4/repo1"))
# exit()
# def judgeRepoEqual(name1, name2):
# if mapping == None: # 没有配置映射
# return name1 == name2
# else:
# for i in fullNameMap: # 比较 full_name 映射 比如 org1/repo1 -> org2/repo2
# if name1 == i[0]:
# if name2 == i[1]:
# return True # 如果 name1 和 name2 在 full_name 映射中,则匹配
# else:
# return False # 如果 name1 在 full_name 映射中,但是 name2 不在,则不匹配
# # 接下来同时比较 org repo 映射,将 org1 repo1进行映射如果 name2 与 name1+映射)相等,则匹配
# [org1, repo1] = name1.split('/')
# [org2, repo2] = name2.split('/')
# for i in orgNameMap: # 将 org1 进行映射 备注如果不存在映射则相当于始终没有进这个for循环中的if条件
# if org1 == i[0]:
# org1 = i[1]
# break
# if org1 != org2: # 如果 org1 和 org2 不相等,则一定不匹配
# return False
# # org1 与 org2 映射后相等,现在比较 repo1 和 repo2
# for i in repoNameMap: # 将 repo1 进行映射 备注如果不存在映射则相当于始终没有进这个for循环中的if条件
# if repo1 == i[0]:
# repo1 = i[1]
# break
# if org1 != org2: # 如果 org1 和 org2 不相等,则一定不匹配
# return False
# return True
# # 测试
# print(judgeRepoEqual("only4/thisisarepo", "only-4/this-is-a-repo")) # True
# print(judgeRepoEqual("only4/thisisarepo", "only4/this-is-a-repo")) # False
# print(judgeRepoEqual("only4/thisisarepo", "only-4/thisisarepo")) # True
# print(judgeRepoEqual("only4/thisisarepo", "only4/thisisarepo")) # False
# print(judgeRepoEqual("only4/repo1", "only5/repo2")) # True
# exit()
for repo1FullName in repo1.keys(): # 遍历repo1仓库名
# print(repo1FullName)
repo1FullName_map = mapRepoName(repo1FullName)
if(repo1FullName_map in repo2.keys()): # 如果在repo2中则说明匹配成功
matchList.get('match').append({
'from': repo1[repo1FullName],
'to': repo2[repo1FullName_map],
})
del repo2[repo1FullName_map]
else:
matchList.get('mismatch')['repo1'].append(repo1[repo1FullName])
matchList.get('mismatch')['repo2'] = list(repo2.values())
return matchList
def printMatchintInfo(matchList, repo1Name = "repo1", repo2Name = "repo2"):
print("################## 以下仓库不会同步 ################## ")
print("{repo1Name} 有但是 {repo2Name} 没有的仓库".format(repo1Name = repo1Name, repo2Name = repo2Name))
for i in matchList.get('mismatch').get('repo1'):
print(' ' + i['html_url'])
print()
print("{repo2Name} 有但是 {repo1Name} 没有的仓库".format(repo1Name = repo1Name, repo2Name = repo2Name))
for i in matchList.get('mismatch').get('repo2'):
print(' ' + i['html_url'])
print()
print("################## 以下仓库会被同步 ################## ")
print("{repo1Name}{repo2Name} 匹配相同的仓库".format(repo1Name = repo1Name, repo2Name = repo2Name))
for i in matchList.get('match'):
print(' ' + i.get("from").get("full_name").ljust(30,' ') + " -> " + i.get("to").get("full_name"))
print()