1
0
mirror of https://gitee.com/coder-xiaomo/gitee2github synced 2025-01-27 11:40:28 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
gitee2github/assets/repoMatching.py

112 lines
4.9 KiB
Python
Raw Permalink Normal View History

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()