循环通过SVN更改文件的批处理脚本

时间:2017-10-06 11:59:39

标签: batch-file svn

所以我有一个post-commit钩子,触发我们的Jenkins服务器上的构建。一切正常,除非我尝试循环浏览SVN仓库中的已更改文件。问题是提交实际挂起,如果我注释掉循环,注意到更改的文件,则提交成功完成。

我用谷歌搜索了SVN diff命令,这似乎是我想要的,将当前版本与HEAD版本进行比较。它在带有硬编码值的命令行上工作,但不在我的循环中,%1%和%2%从SVN本身填充。

到目前为止我的代码:

@echo off
setlocal enabledelayedexpansion

SET REPOS=%1%
SET TXN=%2%

for /f "tokens=*" %%a in ('svnlook author -r !TXN! !REPOS!') do set AUTH_NAME=%%a
SET EMAILS="!AUTH_NAME!"@gmail.com

SET /a OLDTXN=!TXN! - 1

for /f "tokens=*" %%a in ('svn diff --summarize -r !OLDTXN!:!TXN! <repo URL>') do (
    set FILES=%%a
    rem python D:\csvn\data\repositories\Test\hooks\compile_file.py !FILES!
)

其中&#34; repo URL&#34;是SVN中的根代表我硬编码,这很好。 现在例如,如果我注释掉SET TXN行并将其替换为硬编码数值,例如:

SET TXN=518

循环工作,我得到了所有已更改的正确文件的电子邮件,因此它必须是TXN如何从SVN传递到批处理脚本的。它可能不像我想的那样填充。

python脚本被注释掉,只接受该文件作为命令行参数并通过电子邮件发送给DL。这再次与上面的硬编码TXN值一起工作。显然我的循环阻止了提交成功但不确定我做错了什么。但由于上述原因,我很确定它与TXN变量有关。

对我的问题的任何帮助将不胜感激:)

编辑*将变量从%%更改为!!因为我使用的是enabledelayedexpansion *

1 个答案:

答案 0 :(得分:0)

现在已经解决了 - 如果有人正在查看这个以供将来参考,那么问题是减少了SVN传入的TXN变量。为了获得自上次提交以来的更改,我使用了不同的SVN命令,而不是diff命令