forked from zhangyu19/dupPRdetect
123 lines
3.5 KiB
Python
123 lines
3.5 KiB
Python
from flask import Flask, render_template, request
|
|
import detect_gitee, detect_trustie
|
|
import re
|
|
import operator
|
|
import redis
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
@app.route('/')
|
|
def input():
|
|
return render_template('input.html')
|
|
|
|
def parse_gitee(src_url, dst_url, error):
|
|
src_pr_url = src_url.replace("https://gitee.com/", "https://gitee.com/api/v5/repos/")
|
|
dst_pr_url = dst_url.replace("https://gitee.com/", "https://gitee.com/api/v5/repos/")
|
|
|
|
pattern = re.compile('https://gitee.com/.*/.*/pulls/[0-9]*')
|
|
if pattern.search(src_url) is None or pattern.search(dst_url) is None:
|
|
error = 1
|
|
return locals()
|
|
|
|
src_w = src_pr_url.split("/")
|
|
dst_w = dst_pr_url.split("/")
|
|
|
|
src_short_url = src_w[6] + "/" + src_w[7] + "/" + src_w[9]
|
|
dst_short_url = dst_w[6] + "/" + dst_w[7] + "/" + dst_w[9]
|
|
|
|
txt_score, file_score = detect_gitee.main(src_pr_url, dst_pr_url)
|
|
|
|
if txt_score is None:
|
|
error = 1
|
|
return locals()
|
|
else:
|
|
error = 0
|
|
result, final_score = detect_gitee.final_decision(txt_score, file_score)
|
|
|
|
txt_score = '%.1f' % (txt_score * 100)
|
|
file_score = '%.1f' % (file_score * 100)
|
|
final_score_1 = '%.1f' % (final_score * 100)
|
|
final_score_p = int(final_score * 100)
|
|
src_pr_name = src_w[7] + "/" + src_w[9]
|
|
dst_pr_name = dst_w[7] + "/" + dst_w[9]
|
|
|
|
return locals()
|
|
|
|
def url_2_api_tru(url):
|
|
l = url.split("/")
|
|
l[3] = "api"
|
|
l[7] = l[7] + ".json"
|
|
api = "/".join(l[:8])
|
|
return api
|
|
|
|
def url_2_repo(url):
|
|
l = url.split("/")
|
|
return l[3]+"/"+l[4], l[6]
|
|
|
|
def parse_trustie(PR_url, error):
|
|
url_head = PR_url.split("/")
|
|
pattern = re.compile(url_head[0]+'//'+url_head[2]+'/.*/.*/pulls/[0-9]*')
|
|
result_s = re.search(pattern, PR_url)
|
|
# result_d = re.search(pattern, dst_url)
|
|
|
|
if result_s == None:
|
|
error = 1
|
|
return locals()
|
|
|
|
repo_info, pr_num = url_2_repo(PR_url)
|
|
scores = detect_trustie.main(repo_info, pr_num, url_head)
|
|
scores = sorted(scores, key=operator.itemgetter("avg_score"), reverse=True)
|
|
|
|
if scores is None:
|
|
error = 1
|
|
return locals()
|
|
else:
|
|
pass
|
|
return locals()
|
|
|
|
|
|
@app.route('/result',methods = ['POST', 'GET'])
|
|
def output():
|
|
|
|
if request.method == "GET":
|
|
result = request
|
|
|
|
PR_url = request.args["SrcPR"]
|
|
|
|
error = 0
|
|
|
|
if PR_url.split("/")[2] == "forgeplus.trustie.net" or \
|
|
PR_url.split("/")[2] == "120.132.31.109:8080" or \
|
|
PR_url.split("/")[2] == "code.mulanos.cn":
|
|
print("trustie")
|
|
re = parse_trustie(PR_url, error)
|
|
|
|
if re["error"] == 1:
|
|
return render_template("error.html", result=locals())
|
|
else:
|
|
return render_template("result_table.html", result=locals())
|
|
|
|
if request.method == 'POST':
|
|
result = request.form
|
|
|
|
PR_url = result['SrcPR']
|
|
# dst_url = result['DstPR']
|
|
|
|
error = 0
|
|
|
|
if PR_url.split("/")[2] == "forgeplus.trustie.net" or\
|
|
PR_url.split("/")[2] == "120.132.31.109:8080" or \
|
|
PR_url.split("/")[2] == "code.mulanos.cn" :
|
|
print("trustie")
|
|
re = parse_trustie(PR_url, error)
|
|
|
|
if re["error"] == 1:
|
|
return render_template("error.html", result=locals())
|
|
else:
|
|
return render_template("result_table.html", result=locals())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
app.run(host="0.0.0.0", debug=True) |