svn关联redmine (而不是redmine关联svn)

需求是这样:
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'))

猜你喜欢

转载自blog.csdn.net/wangduqiang747/article/details/107152740
今日推荐