diff --git a/plugins/csvn/hook/post-commit.tpl b/plugins/csvn/hook/post-commit.tpl new file mode 100755 index 000000000..fe305794e --- /dev/null +++ b/plugins/csvn/hook/post-commit.tpl @@ -0,0 +1,11 @@ +#!/bin/bash + + + +REPOS="$1" +REV="$2" +TXN_NAME="$3" + + +REPOS_NAME=${REPOS##*/} +PRJOECT_DIR={$PRJOECT_DIR}/wwwroot/$REPOS_NAME diff --git a/plugins/csvn/index.py b/plugins/csvn/index.py index cfce79348..a21a64652 100755 --- a/plugins/csvn/index.py +++ b/plugins/csvn/index.py @@ -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' diff --git a/plugins/csvn/js/csvn.js b/plugins/csvn/js/csvn.js index a0230fe39..23d9703d7 100755 --- a/plugins/csvn/js/csvn.js +++ b/plugins/csvn/js/csvn.js @@ -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){ '删除 | ' + '权限 | ' + '源码 | ' + - '脚本' + + '脚本' + ''; } @@ -311,16 +311,66 @@ function csvnAddProject(){ } -function csvnProjectScript(pnanm){ +function csvnProjectScript(pnanm, has_hook){ + + var html = ''; + if (has_hook){ + html += ''; + html += ''; + html += ''; + } else { + html += ''; + } var loadOpen = layer.open({ type: 1, title: '脚本设置', area: '240px', - content:'
\ - \ - \ -
' + content:'
'+html+'
' + }); +} + +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']}); + } }); }