pull/109/head
Mr Chen 7 years ago
parent 54dd810e1f
commit 003e97cf96
  1. 11
      plugins/csvn/hook/post-commit.tpl
  2. 89
      plugins/csvn/index.py
  3. 66
      plugins/csvn/js/csvn.js

@ -0,0 +1,11 @@
#!/bin/bash
REPOS="$1"
REV="$2"
TXN_NAME="$3"
REPOS_NAME=${REPOS##*/}
PRJOECT_DIR={$PRJOECT_DIR}/wwwroot/$REPOS_NAME

@ -301,6 +301,19 @@ def getALlProjectList(search=''):
return dlist
def checkProjectListIsHasScript(data):
dlen = len(data)
for x in range(dlen):
path = getServerDir() + '/data/repositories/' + \
data[x]['name'] + '/hooks/post-commit'
if os.path.exists(path):
data[x]['has_hook'] = True
else:
data[x]['has_hook'] = False
return data
def projectList():
import math
args = getArgs()
@ -318,22 +331,20 @@ def projectList():
search = args['search']
dlist = getALlProjectList(search)
data = {}
dlist_sum = len(dlist)
page_info = {'count': dlist_sum, 'p': page,
'row': 10, 'tojs': 'csvnProjectList'}
data['list'] = public.getPage(page_info)
data['page'] = page
data['page_size'] = page_size
data['page_count'] = int(math.ceil(dlist_sum / page_size))
start = (page - 1) * page_size
ret_data = dlist[start:start + page_size]
ret_data = checkProjectListIsHasScript(ret_data)
data = {}
data['data'] = ret_data
data['list'] = public.getPage(
{'count': dlist_sum, 'p': page, 'row': 10, 'tojs': 'csvnProjectList'})
data['ip'] = public.getLocalIp()
data['port'] = getHttpPort()
data['csvn_port'] = getCsvnPort()
start = (page - 1) * page_size
data['data'] = dlist[start:start + page_size]
return public.getJson(data)
@ -374,7 +385,7 @@ def makeAclFile(content):
for iv in range(len(v)):
tmp += v[iv]['user'] + ' = ' + v[iv]['acl'] + "\n"
tmp += "\n"
svn_tmp_path = getServerDir() + '/data/conf/svn_access_file.log'
# svn_tmp_path = getServerDir() + '/data/conf/svn_access_file.log'
return public.writeFile(svn_access_file, tmp)
@ -500,6 +511,54 @@ def projectAclSet():
makeAclFile(acl)
return 'ok'
def projectScriptLoad():
args = getArgs()
if not 'pname' in args:
return 'project name missing'
commit_tpl = getPluginDir() + '/hook/post-commit.tpl'
pro_commit_file = getServerDir() + '/data/repositories/' + '/' + \
args['pname'] + '/hooks/post-commit'
content = public.readFile(commit_tpl)
content = content.replace('{$PRJOECT_DIR}', public.getRootDir())
public.writeFile(pro_commit_file, content)
public.execShell('chmod 777 ' + pro_commit_file)
return 'ok'
def projectScriptUnload():
args = getArgs()
if not 'pname' in args:
return 'project name missing'
pro_commit_file = getServerDir() + '/data/repositories/' + '/' + \
args['pname'] + '/hooks/post-commit'
public.execShell('rm -f ' + pro_commit_file)
return 'ok'
def projectScriptEdit():
args = getArgs()
if not 'pname' in args:
return 'project name missing'
data = {}
pro_commit_file = getServerDir() + '/data/repositories/' + \
args['pname'] + '/hooks/post-commit'
if os.path.exists(pro_commit_file):
data['status'] = True
data['path'] = pro_commit_file
else:
data['status'] = False
data['msg'] = 'file does not exist'
return public.getJson(data)
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
@ -544,5 +603,11 @@ if __name__ == "__main__":
print projectAclDel()
elif func == 'project_acl_set':
print projectAclSet()
elif func == 'project_script_load':
print projectScriptLoad()
elif func == 'project_script_unload':
print projectScriptUnload()
elif func == 'project_script_edit':
print projectScriptEdit()
else:
print 'fail'

@ -5,7 +5,7 @@ function csvnPost(method,args,callback){
$.post('/plugins/run', {name:'csvn', func:method, args:JSON.stringify(args)}, function(data) {
layer.close(loadT);
if (!data.status){
layer.msg(data.data,{icon:0,time:2000,shade: [0.3, '#000']});
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
@ -25,7 +25,7 @@ function csvnUserFind(){
}
function csvnUserList(page, search) {
var _data = {};
if (typeof(page) =='undefined'){
var page = 1;
@ -214,7 +214,7 @@ function csvnProjectList(page, search){
'<a class="btlink" onclick="csvnDelProject(\''+ulist[i]['name']+'\')">删除</a> | ' +
'<a class="btlink" onclick="csvnAclProject(\''+ulist[i]['name']+'\')">权限</a> | ' +
'<a class="btlink" target="_blank" href="' + code_url +'">源码</a> | ' +
'<a class="btlink" onclick="csvnProjectScript(\''+ulist[i]['name']+'\')">脚本</a>' +
'<a class="btlink" onclick="csvnProjectScript(\''+ulist[i]['name']+'\','+ ulist[i]['has_hook']+')">脚本</a>' +
'</td></tr>';
}
@ -311,16 +311,66 @@ function csvnAddProject(){
}
function csvnProjectScript(pnanm){
function csvnProjectScript(pnanm, has_hook){
var html = '';
if (has_hook){
html += '<button onclick="csvnProjectScriptEdit(\''+pnanm+'\')" class="btn btn-default btn-sm">手动编辑</button>';
html += '<button onclick="csvnProjectScriptLoad(\''+pnanm+'\')" class="btn btn-default btn-sm">重新加载</button>';
html += '<button onclick="csvnProjectScriptUnload(\''+pnanm+'\')" class="btn btn-default btn-sm">卸载脚本</button>';
} else {
html += '<button onclick="csvnProjectScriptLoad(\''+pnanm+'\')" class="btn btn-default btn-sm">加载脚本</button>';
}
var loadOpen = layer.open({
type: 1,
title: '脚本设置',
area: '240px',
content:'<div class="change-default pd20">\
<button class="btn btn-default btn-sm">'+'加载'+'</button>\
<button class="btn btn-default btn-sm">'+'编辑'+'</button>\
</div>'
content:'<div class="change-default pd20">'+html+'</div>'
});
}
function csvnProjectScriptLoad(pname){
csvnPost('project_script_load', {'pname':pname}, function(data){
if (data.data != 'ok'){
layer.msg(data.data,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
layer.msg('加载成功!',{icon:1,time:2000,shade: [0.3, '#000']});
setTimeout(function(){
$('.layui-layer-close1').click();
csvnProjectList();
},2000);
});
}
function csvnProjectScriptUnload(pname){
csvnPost('project_script_unload', {'pname':pname}, function(data){
console.log(data);
if (data.data != 'ok'){
layer.msg(data.data,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
layer.msg('卸载成功!',{icon:1,time:2000,shade: [0.3, '#000']});
setTimeout(function(){
$('.layui-layer-close1').click();
csvnProjectList();
},2000);
});
}
function csvnProjectScriptEdit(pname){
csvnPost('project_script_edit', {'pname':pname}, function(data){
var rdata = $.parseJSON(data.data);
if (rdata['status']){
onlineEditFile(0, rdata['path']);
$('.layui-layer-close1').click();
csvnProjectList();
} else {
layer.msg(rdata.msg,{icon:1,time:2000,shade: [0.3, '#000']});
}
});
}

Loading…
Cancel
Save