windows下svn post-commit的实现
2021-04-14 14:26
标签:提取 bug 路径 取出 color goto 仓库 svn com 前言: 好的!在结束了上一博客教程的Subversion安装之后。我们开始了下一项工作,windows版本下 svn post-commit的实现。说实话,这方面的知识网上的知识并不是很多~~~~~~~。 >>>post-commit是干什么的? 当用户实现commit操作的时候,就会执行相应的post-commit文件里的内容。实现commit时的自动触发。 >>>那么这个 post-commit.bat 文件应该放在哪里呐? 嗯嗯,这个问题主要取决于你安装VisualSVN Server时选择安装Repository的目录位置。这里就假如你选择了默认安装位置 C:\Repository 下吧。 当你在VIsualSVN Server下创建了相应的repository后,假如你创建的仓库名字为 test。那么在你的 C:\Repository 下就会生成相应的 test 仓库。 好的,现在就把你的 post-commit.bat 文件放到 C:\Repository\test\hooks 目录下吧。 ================================================================================ 好的。下面就需要实现相应的 post-commit.bat 文件的功能啦。当然,每个人的需求时不一样的啦。我这里是提取出相应的svn数据信息,然后通过curl工具 将相应的数据post到对应的url。 下面是我编写的post-commit.bat, 大家可以作为参考(当然啦~。~,这里你还得熟悉熟悉windows的批处理。。。。。): 将相应 post-commit.bat 文件放到相应的仓库hooks目录下 ============================================================================= 下面就是测试 post-commit 的实现效果了。。。。 (1)首先checkout 在VisaulSVN服务器下创建的 test 仓库 到自己想要的目录下。(点击鼠标右键就可以看到相应的 svn checkout操作) (2)checkout结束之后,在copy下来的test仓库里面添加或者更新相应的文件或目录。 (3)完成上面的操作后,鼠标右键发现svn commit 操作,然后点击实现。 当然这里会出现各种各样的bug。还是需要去解决的。 windows下svn post-commit的实现 标签:提取 bug 路径 取出 color goto 仓库 svn com 原文地址:https://www.cnblogs.com/xautxuqiang/p/8961770.html@echo on
:: 将该文件放置到svn repository的hooks目录,如D:\subversion\test\hooks
:: 1. 名字一定要是post_commit
:: 2. 修改case里面的curl为easyops应用流水线的svn钩子
SET LOGFILE=C:\post-commit.log
SET REPOS=%1
SET REV=%2
SET TXN_NAME=%3
::UUID
svnlook uuid %REPOS% > .\data.txt
SET /p UUID=txt
::AUTHOR
svnlook author %REPOS% -r %REV% > .\data.txt
SET /p AUTHOR=txt
::LOG
svnlook log %REPOS% -r %REV% > .\data.txt
SET /p LOG=txt
::DATE
svnlook date %REPOS% -r %REV% > .\data.txt
SET /p DATE=txt
echo %REPOS% %REV% %TXN_NAME% %UUID% >> %LOGFILE%
::==================================================
::CHANGE
svnlook changed %REPOS% -r %REV% > .\data.txt
for /f "delims=" %%i in (.\data.txt) do (set CHANGE=%%i)&(goto exit_change_for)
:exit_change_for
::TYPE
for /f "tokens=2 delims= " %%t in ("%CHANGE%") do for /f "tokens=1 delims=/" %%c in ("%%t") do set TYPE=%%c
::TAG
for /f "tokens=2 delims= " %%t in ("%CHANGE%") do for /f "tokens=2 delims=/" %%c in ("%%t") do set TAG=%%c
::======================================================
echo "judge from %CHANGE%, type is %TYPE%" >> %LOGFILE%
:: 按应用需求,在不同的类型里面填入easyops的svn钩子url,如果不区分分支,则在*)里面填
if "%TYPE%"=="trunk" goto label_trunk
if "%TYPE%"=="tags" goto label_tag
if "%TYPE%"=="branchs" (goto label_branchs) else goto label_all
:label_trunk
SET url="http://r.easyops.cn/hook/subversion/org/1888/app/5ac9dd6f01ca7/pipeline/4dc5522c75d5d5e68e5b0d89925c3802"
goto exit_type
:label_tags
SET url=""
::url=‘http://admin.easyops.local/hook/subversion/org/1888/app/598beb9fbcc06/pipeline/85df75da575635744a1f2feefa913a61‘
goto exit_type
:label_branchs
SET url=""
goto exit_type
:label_all
SET url="" && goto exit_type
:exit_type
if "%url%"=="" (echo "not found trigger url in %TYPE% type, exit" >> %LOGFILE% && exit 0) else echo "will trigger %url%" >> %LOGFILE%
::将win下路径的 \ 替换为 \\ 。不然会出现格式问题
set REPOS=%REPOS:\=\\%
set REV=%REV:\=\\%
set TXN_NAME=%TXN_NAME:\=\\%
set UUID=%UUID:\=\\%
set TAG=%TAG:\=\\%
set AUTHOR=%AUTHOR:\=\\%
set DATE=%DATE:\=\\%
set TYPE=%TYPE:\=\\%
::generate_post_data
set post_data="{\"repos\": \"%REPOS%\",\"rev\":\"%REV%\",\"txn_name\":\"%TXN_NAME%\",\"uuid\":\"%UUID%\",\"type\":\"%TYPE%\",\"tag\":\"%TAG%\",\"author\":\"%AUTHOR%\",\"date\":\"%DATE%\"}"
set curl=C:\curl.exe
%curl% -i -X POST -H "Content-Type: application/json" --data %post_data% %url%
文章标题:windows下svn post-commit的实现
文章链接:http://soscw.com/index.php/essay/75699.html