【问题标题】:Batch Script to Loop through SVN changed files循环通过 SVN 更改文件的批处理脚本
【发布时间】:2017-10-06 11:59:39
【问题描述】:

所以我有一个 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!
)

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

SET TXN=518

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

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

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

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

【问题讨论】:

    标签: batch-file svn


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-10-01
      • 1970-01-01
      • 2011-02-05
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多