0

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

4

3 回答 3

1

您只犯了一个小错误:与svn log -v. 它svnlook带有子命令changed

回购中的修订样本(用于您将使用的交易-t %TXN%

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

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

于 2013-03-27T16:48:20.650 回答
1

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

于 2013-02-14T15:23:10.347 回答
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"
于 2013-03-27T13:09:24.117 回答