Subversion中的钩子

时间:2013-02-14 14:33:21

标签: svn batch-file svn-hooks

我想在Subversion中通过post-commit钩子运行批处理文件。我的问题是我想为已经提交的每个文件运行一次,但是我不知道如何在钩子中获取提交文件的名称。我能够为文件夹中的每个文件运行它,但是当我离开这个测试环境并且实际使用这个功能时,有很多文件,这将是非常低效的。任何想法??

3 个答案:

答案 0 :(得分:1)

SVN向钩子传递两个值,即存储库的路径和生成的修订号 使用此信息,您可以向SVN询问该修订中更改的路径,并获取添加/修改的文件列表。

答案 1 :(得分:1)

你只犯了一个小错误:事务中的文件列表(服务器端,因为在服务器上执行的钩子)可以比svn log -v更容易准备(并且没有“日志的”噪音“)。它是svnlook子命令changed

repo中的修订示例(对于您将使用的事务-t %TXN%

>svnlook.exe changed -r 31 Hello
U   trunk/Hello.de.txt
U   trunk/Hello.en.txt
U   trunk/Hello.fr.txt

Hello存储库 root(不是工作副本)的路径,命令输出部分显示为svn st的输出,文件路径是repo-的相对路径根

答案 2 :(得分:0)

我能够使用批处理并使用一些临时文本文件来存储一些数据。我不得不做一些处理来获取变量中文件的名称,因为这是我作为参数所需要的。这可能不是最有效的方法,但它实现了我的目标......

setlocal EnableDelayedExpansion

rem write a list of the changed files in a text file
"C:\svnpath\bin\svn.exe" log "C:\repo-path\project" -r %TXN% --verbose > "C:\path\changelist.txt"

rem write the list of all files into a text file
cd "C:\repo-path\project"
dir /b > "C:\path\filelist.txt"

rem loop through files
cd "C:\path"
for /F "delims=" %%i IN (filelist.txt) do (
   rem search for file name in list of changed files, if found run batch file on it
   find /i "%%i" changelist.txt > nul

   echo %%i > "C:\path\temp.txt"

   if not errorlevel 1 (
      cd "C:\repo-path\project"
      batchfile.bat %%i
   )
)

rem delete temp files when finished
del "C:\path\filelist.txt"
del "C:\path\changelist.txt"
del "C:\path\changedfiles.txt"