svn关联redmine (而不是redmine关联svn)
程序员文章站
2022-06-24 11:41:01
需求是这样:1.项目架构要重构.切到maven2.代码要有多个分支(当前只有trunk)3.代码提交要关联redmine, 用来规范不能提交不属于当前流且当前版本的开发任务.为代码多分支服务. (不熟悉这种开发方式的开发很容易搞错分支)方式是:使用svn钩子pre-commit钩子,在钩子里调用redmine的python插件请求到结果, 然后决定是否可用提交成功exit 1 阻断exit 0 可用提交......
需求是这样:
1.项目架构要重构.切到maven
2.代码要有多个分支(当前只有trunk)
3.代码提交要关联redmine, 用来规范不能提交不属于当前流且当前版本的开发任务.为代码多分支服务. (不熟悉这种开发方式的开发很容易搞错分支)
方式是:
使用svn钩子
pre-commit钩子,
在钩子里调用redmine的python插件
请求到结果, 然后决定是否可用提交成功
exit 1 阻断
exit 0 可用提交
过程
hook里可以获取三个参数
第一个参数(哪个库)加第二个参数(提交的版本号 transaction)可以唯一确定某次提交
都是svnlook的参数
https://www.cnblogs.com/wangjiyuan/p/svnnn.html
注意要使用
E:\Program Files\VisualSVN Server\bin
而不是
C:\Program Files\TortoiseSVN\bin 里的svnlook
hook代码如下
set REPOS=%1
set TXN=%2
set AA= %STDIN
set SVN_BINDIR="E:\Program Files\VisualSVN Server\bin"
echo 提交时必须填写说明 1>&2
echo "%REPOS%" -t "%TXN%" 1>&2
echo 版本不对99 1>&2
echo "%AA%" 1>&2
::for /f "delims=" %%i in ('dir ') do set b=%%i
::echo b=%b%
::我也不懂,大意是 svnlook是查看当次transaction的提交信息.
::然后将执行的结果传给 check.py,然后开始python执行.
%SVN_BINDIR%\svnlook.exe log "%REPOS%" -t "%TXN%" | python %SVN_BINDIR%\check.py "......" 1>&2
::python 脚本里最后执行exit(x) erorlevel 就是x
if %errorlevel% equ 0 (
echo 000 1>&2
)
if %errorlevel% equ 1 (
echo 111 1>&2
)
if %errorlevel% equ 2 (
echo 222 1>&2
)
exit 1
然后是执行的python脚本(还没开始连redmine):
# coding=gbk
import re
import sys
input_file = sys.stdin
print(input_file)
print("666") #相当于java里的println, 会打到svn提交失败的原因中
for s in input_file:
u = s.decode('GBK')
print(u) #这里可以得到提交时写的备注,通过备注里的redmine号,确认是否可以提交,出错给出详细信息让用户改redmine或给提交备注
exit(2)
python 连接redmine
https://python-redmine.com
redmine有提供api
暂时的效果
2020-07-09更新:
python连接redmine的代码
# -*- coding: utf-8 -*-
from redminelib import Redmine
#https://python-redmine.com/index.html
redmine = Redmine('http://192.168.*****/redmine', username='****', password='*****')
project = redmine.project.get('*****')
print(project.id)
issue = redmine.issue.get(15320)#
print(issue.url)
print(issue.assigned_to)
print(issue.description)
print(issue.status)
#print(issue.closed_on)
print(issue.status)
print(issue.subject) #
print('----------1-------')
#print(issue.custom_fields.getattribute('cf_50'))
print(issue.custom_fields.get('cf_50'))
print('---------2--------')
print(dir(issue.custom_fields ))
print('----------3-------')
print(issue.custom_fields.total_count)
#for num in range(0,25):
# print(num)
# print(issue.custom_fields[num]['value']) #分类模块
print(issue.custom_fields[0]['value']) #业务归属
print(issue.custom_fields[4]['value']) #分类模块
print(issue.custom_fields[5]['value']) #所属部门
print(issue.custom_fields[7]['value']) #所属BA
print(issue.custom_fields[13]['value']) #版本管理
print('----------4------')
print( dir(issue.custom_fields))
print('-----------5------')
print( dir(issue))
#print(project.issue.get('15320'))
本文地址:https://blog.csdn.net/wangduqiang747/article/details/107152740
上一篇: js中触发表单提交
下一篇: jQuery常用知识点大总结