为了维护svn的log,方便后续查找某个模块的svn提交操作,今天终于动手写了一次svn的hook脚本。虽说功能不复杂,但是经历还是有点波折。特此记录
目标:输入的注释要遵照格式:[模块名]操作日志,其中模块名不少于4个字符(或2个汉字),操作日志不少于10个字符(或5个汉字)

由于公司的svnserver是在windows机器上,所以需要编辑pre-commit.bat

::/
@echo off  
setlocal

set REPOS=%1  
set TXN=%2

::svnlook log %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}"  1>&2

::rem 保证输入8个字符
::svnlook log %REPOS% -t %TXN% | findstr "........" > nul
::if %errorlevel% gtr 0 goto :err_action

rem  按照格式输入
svnlook log %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}"  | grep -E "^\[.{3}.*\].{10}.*" > nul
if %errorlevel% gtr 0 goto :err_action1

rem 过滤空格字符
svnlook log %REPOS% -t %TXN% | findstr /ic:"        " > nul
if %errorlevel% gtr 0 goto :success
 
:::err_action
::echo 输入的注释不少于 8 个字符说明(或 4 个汉字) >&2

:err_action1
echo 输入的注释要遵照格式:[模块名]操作日志,其中模块名不少于4个字符(或2个汉字),操作日志不少于10个字符(或5个汉字) >&2

goto :err_exit

:err_exit
exit 1
 
:success
exit 0

::/

走过的坑:
1.windows下的findstr对正则表达式的支持不够全面,对于方括号的匹配始终没有找到解决办法,最后干脆用linux下的工具来实现
2.找到windows版的grep和awk工具,放到系统盘的目录有讲究,32位系统的话放到c:\windows\system32下,64位系统需要放到C:\Windows\SysWOW64,否则会报找不到命令的错误
3.svn的日志是一行一行提交的,所以需要串成一行字符串来做处理

为svn添加hook脚本相关推荐

  1. 使用JScript设置SVN客户端hook

    作者:朱金灿 来源:http://blog.csdn.net/clever101 关于什么叫SVN hook,请参考这篇文章:从传统的 关于SVNHooks(钩子)的使用,这里不作详述. 设置SVN客 ...

  2. 如何在内部 Stash 服务器上添加 hook

    关于 hook 所谓的 hook 就是存在于.git/hooks/ 目录下的一些脚本文件(shell.Python.Ruby.Perl 皆可),这些脚本文件可以在某些 git 操作执行之前或者之后触发 ...

  3. JavaScript常用的Hook脚本

    JavaScript常用的Hook脚本 本文Hook脚本 来自 包子 页面最早加载代码Hook时机# 在source里 用dom事件断点的script断点 然后刷新网页,就会断在第一个js标签,这时候 ...

  4. 动态引入/添加js脚本

    前言 动态添加脚本到页面中 动态引入/添加js脚本 var script=document.createElement("script"); script.type="t ...

  5. centos6+ 将程序 注册到 service进行启动 停止 重启等:以nginx为例,添加nginx脚本

    service的运行过程.以network为例:service network start. 首先,service 会去/etc/init.d下寻找network脚本,start是networking ...

  6. 数字IC设计随笔之一(Verdi自动添加波形脚本应用)

    Verdi自动添加波形脚本应用 在刚接触verdi时,每次查看波形都需要重新加载一遍,写了简单的脚本用于实现波形加载,没想到下载需求挺多,也有私信问如何使用,在这里将做简单的说明. 脚本有三个文件,分 ...

  7. Iptables自动添加黑名单脚本

    IPtables自动添加黑名单脚本 1.脚本需求 登陆服务器日志/var/log/secure 检测检查日志中认证失败的行以及频繁发送请求的IP地址(失败条件可自行添加) 添加ip进iptables防 ...

  8. 宝塔linux shell定时访问url,bt(宝塔)面板添加shell 脚本通过nginx日志封访问频率过高的IP...

    额,这篇文章是bt(宝塔)面板来写的文章,其他的程序如果是wdcp管理面板也有添加shell脚本的功能,大鸟自己用的是bt(宝塔)面板,所以说说如何添加shell 脚本通过nginx日志封访问频率过高 ...

  9. 详细注释版的ABAQUS COH2D4单元批量添加Python脚本

    详细注释版的ABAQUS COH2D4单元批量添加Python脚本 ABAQUS Cohesive单元批量添加脚本程序-附详细注释版: #本程序只适用于二维问题,对于三维COH3D8的批量嵌入只需要转 ...

最新文章

  1. 【ACM】杭电OJ 2023
  2. 同时测试多个服务是否存活的脚本[shell和perl]
  3. 线程同步——内核对象实现线程同步——等待函数
  4. 【BZOJ 3729】3729: Gty的游戏 (Splay维护dfs序+博弈)
  5. 开源库 Natasha2016 ,让IL编程跑起来
  6. C#LeetCode刷题之#674-最长连续递增序列( Longest Continuous Increasing Subsequence)
  7. leetcode之二叉树的层序遍历
  8. mysql更改执行计划_11g中 connect by 语句执行计划改变
  9. oracle:10g下载地址(转载)
  10. 人类为什么不会被人工智能取代?
  11. 笔记:STM32的ADC参考电压与参照电压(电源监测)
  12. 获取服务器端的webapps路径
  13. 买天猫网店转让成为电商创业新趋势
  14. 软件打开文件夹后闪退
  15. Python使用pyecharts库制作桑基图
  16. SF25 | 日内交易策略开发(一)黄金日内交易模型
  17. soul网关mysql8_深度解析 Soul 网关——数据同步
  18. 英语语法汇总(2.冠词)
  19. 常用眼底图像数据集简介及下载--糖尿病视网膜病变 EyePacs,APTOS2019,STARE数据集
  20. 数字化如何助力品牌发展,高端茶品牌竹叶青告诉你

热门文章

  1. 隆重推荐kmplayer播放器——我的最爱播放器
  2. Mac电脑使用终端快速进入mysql命令行的方法(超详细)
  3. vue3.0项目中使用mitt进行组件传值
  4. 利用Debug Api 获得QQ2007密码
  5. 【每日1刷系列】软件测试常见面试题—深层概念
  6. 计算机配置管理模块mmc无法,Windows10提示MMC无法创建管理单元的解决方案
  7. turn.js 异步加载实现翻书效果
  8. CANopen协议理解
  9. hibernate.validator.constraints.NotEmpty鏍¢獙璇锋眰鍙傛暟鎶ラ敊java.lang.NoClassDefFoundError- javax-el-Propert
  10. Appletv3 到手试用 ,并推荐美剧一部