欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 14:48:16
需求是这样:1.项目架构要重构.切到maven2.代码要有多个分支(当前只有trunk)3.代码提交要关联redmine, 用来规范不能提交不属于当前流且当前版本的开发任务.为代码多分支服务. (不熟悉这种开发方式的开发很容易搞错分支)方式是:使用svn钩子pre-commit钩子,在钩子里调用redmine的python插件请求到结果, 然后决定是否可用提交成功exit 1 阻断exit 0 可用提交......

需求是这样:
1.项目架构要重构.切到maven
2.代码要有多个分支(当前只有trunk)
3.代码提交要关联redmine, 用来规范不能提交不属于当前流且当前版本的开发任务.为代码多分支服务. (不熟悉这种开发方式的开发很容易搞错分支)

方式是:
使用svn钩子svn关联redmine (而不是redmine关联svn)
pre-commit钩子,
在钩子里调用redmine的python插件
请求到结果, 然后决定是否可用提交成功
exit 1 阻断
exit 0 可用提交

过程
hook里可以获取三个参数
svn关联redmine (而不是redmine关联svn)
第一个参数(哪个库)加第二个参数(提交的版本号 transaction)可以唯一确定某次提交
都是svnlook的参数

https://www.cnblogs.com/wangjiyuan/p/svnnn.html

svn关联redmine (而不是redmine关联svn)
注意要使用
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

暂时的效果
svn关联redmine (而不是redmine关联svn)

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