SVN hooks+Jira WebService实现控制日志信息提交总结

一、SVN hooks相关知识
   SVN hooks即SVN钩子脚本是利用后台的管理命令和所需要使用的hooks提供的参数。来进行一些组合,满足的需求! 钩子脚本在每个repos的hooks目录下面。每个里面都有模板,名字如:pre-commit.tmpl等,要实现钩子脚本,即在hooks目录下创建批处理或者可执行文件,文件名与相应的钩子模板名同如:pre-commit.bat。
二、WebService
   Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。很早就耳闻WebService,不过对其了解不多。这次的需要的操作是调用Jira系统的WebService,通过查相应资料获得WSDL的URL,再借用WSDL2JAVA工具生成客户端代码,将生成的代码导入eclipse,进行代码调用。
调用代码如下:
Java代码   收藏代码
  1. public class QSVerified {  
  2.   
  3.     public static final String UAT_VERIFIED = "10006";  
  4.     public static final String QA_VERIFIED = "10008";  
  5.     public static final String CLOSED = "6";  
  6.       
  7.     public static void main(String[] args) {  
  8.           
  9.         JiraSoapService cenericServices;  
  10.       
  11.         try {  
  12.             cenericServices = new JiraSoapServiceServiceLocator().getJirasoapserviceV2();  
  13.                 String login = cenericServices.login("username""password");  
  14.                 RemoteIssue issue = cenericServices.getIssue(login, args[0]);  
  15.                 String status = issue.getStatus();  
  16.                 if(UAT_VERIFIED.equals(status)||QA_VERIFIED.equals(status)  
  17.                 ||CLOSED.equals(status)){  
  18.                     System.exit(1);  
  19.                 }else{  
  20.                     System.exit(0);  
  21.                 }  
  22.             } catch (ServiceException e) {  
  23.                 e.printStackTrace();  
  24.             } catch (RemoteAuthenticationException e) {  
  25.                 e.printStackTrace();  
  26.             } catch (RemoteException e) {  
  27.                 e.printStackTrace();  
  28.             } catch (java.rmi.RemoteException e) {  
  29.                 e.printStackTrace();  
  30.             }  
  31.     }  
  32. }  

三、打jar包
   需要将自己写的代码及WebService生成的客户端代码进行打包,打包命令:jar -cvf com/ QSVerified.jar,打包好后修改MANIFEST.MF文件,加上Main-Class及Class-Path,依赖包放在lib文件夹中,将QSVerified.jar及lib拷贝到hooks目录下。
四、在bat文件中执行jar包
   在执行jar包时要注意加是jar的目录。
   pre-commit.bat代码如下:

Java代码   收藏代码
  1. @echo off  
  2. set SVN_BINDIR=C:\"Program Files"\"VisualSVN Server"\bin  
  3. setlocal  
  4. set REPOS=%1  
  5. set TXN=%2  
  6. set first=1  
  7.   
  8. rem check that logmessage not null  
  9. %SVN_BINDIR%\svnlook log "%REPOS%" -t "%TXN%" | findstr "." > nul  
  10. set s=%SVN_BINDIR%\svnlook log "%REPOS%" -t "%TXN%"  
  11. for /f "delims=" %%a in ('%s%'do ( if !first!==1 set str=%%a   
  12. set first=0)  
  13. set st=%str:*-=%  
  14. set prefix=QS-  
  15. set key=%prefix%%st:~0,5%  
  16. set temp=%st:~4,1%  
  17. if "%temp%"==" " set key=%prefix%%st:~0,4%  
  18. if %errorlevel% gtr 0 goto err  
  19. java -jar %REPOS%\hooks\QSVerified.jar %key%  
  20. if %errorlevel% gtr 0 goto err1  
  21. exit 0  
  22. :err1  
  23. echo The status of %key% is 'UAT Verified' or 'QA Verified' or 'Closed'1>&2  
  24. exit 1  
  25. :err  
  26. echo Please fill out log messages! 1>&2  
  27. exit 1   


注意:bat中字符串的比较,变量需要加上引号,如"%s%"="abc"


博文转自xafc2370


买JIRA上CSDN,特殊折扣购买通道:

http://atlassian.csdn.net/module/btc/atlassian/prduct_detail?project_id=445&module=34&product=9

CSDN开立Atlassian中文技术论坛更多交流分享请点击:

http://bbs.csdn.net/forums/atlassian



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来回答你的问题。 首先,SVN hooks是Subversion版本控制系统中的一种机制,用于在版本控制操作(如提交、更新、合并等)发生时触发自定义操作。SVN hooks分为客户端钩子和服务器端钩子两种,客户端钩子是客户端本地的操作,而服务器端钩子则是服务器端的操作。 针对你的问题,我们可以使用服务器端钩子中的pre-commit钩子实现强制写日志和修改日志的操作。pre-commit钩子会在用户提交代码之前被触发,我们可以在这个钩子中进行日志的修改和验证操作。 以下是一个实现强制写日志和修改日志的pre-commit钩子的示例代码: ```python #!/usr/bin/env python import os import sys import re # 定义日志格式验证规则 LOG_PATTERN = re.compile(r'^[a-zA-Z0-9]{1,20}: .*') # 获取提交日志信息 log_file = sys.argv[2] with open(log_file, 'r') as f: log_msg = f.read() # 验证日志格式 if not LOG_PATTERN.match(log_msg): print('日志格式不正确,请按照 "用户名: 日志信息" 格式提交日志。') sys.exit(1) # 修改日志信息 username = os.environ.get('USERNAME') new_log_msg = '{}: {}'.format(username, log_msg) # 将修改后的日志信息写回日志文件 with open(log_file, 'w') as f: f.write(new_log_msg) ``` 该钩子会检查提交日志的格式是否符合规范,并在不符合规范时输出错误信息并终止提交操作。同时,钩子还会在日志信息前添加提交者的用户名,以实现修改日志的操作。 为了使用该钩子,你需要将以上代码保存为pre-commit.py文件,并将该文件放置在SVN服务器的hooks目录中(通常位于SVN安装目录下的hooks目录中)。然后,将该文件设置为可执行权限: ```bash chmod +x /path/to/hooks/pre-commit.py ``` 最后,你需要在SVN服务器的hooks目录下创建一个pre-commit文件,并将以下内容写入该文件: ```bash #!/bin/bash /usr/bin/python /path/to/hooks/pre-commit.py "$1" "$2" ``` 该文件会调用pre-commit.py脚本,并传递SVN提交时的参数。现在,每次用户提交代码时,pre-commit钩子都会被触发,实现强制写日志和修改日志的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值