首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过windows批处理从svnlook获取日志消息

通过windows批处理从svnlook获取日志消息
EN

Stack Overflow用户
提问于 2012-04-30 17:47:13
回答 3查看 5.6K关注 0票数 3

我尝试为我的svn存储库准备一个提交后挂钩。因此,我需要上次提交时的日志消息,该消息是通过命令svnlook log -r %REV% %REPOS%获得的。使用适当的参数填充代码片段,我会得到以下多行日志消息:

代码语言:javascript
复制
This
is
my
transaction.

到目前为止,这个方法运行得很好。现在我将其放在一个.bat文件中:

代码语言:javascript
复制
@ECHO OFF

REM just for testing purpose...
SET REPOS=C:\repo
SET REV=40

FOR /F %%i in ('svnlook log -r %REV% %REPOS%') do SET VAR=%%i

ECHO %VAR%

当我执行脚本时,只有最后一行的transaction.被回显。for循环是一个代码片段,我认为它会将svnlook输出读入%var%

我的方法是在一个变量中获取日志消息,我将该变量作为参数传递给另一个exe文件。但它不会起作用。我不知道如何正确使用循环。

日志消息应作为参数提供给另一个exe-file。

我将脚本修改为以下代码(@thx PA.)

代码语言:javascript
复制
@ECHO OFF
setlocal enabledelayedexpansion

SET REPOS=C:\repo
SET REV=40

SET MSG=
FOR /F %%i in ('svnlook log -r %REV% %REPOS%') do SET VAR=!VAR! %%i
ECHO !VAR!

输出现在是This is my transaction.,但是换行符消失了,但是我需要进一步的处理。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-30 19:04:04

因为您还想要换行符,所以可以在连接行时添加它们。

代码语言:javascript
复制
@ECHO OFF
setlocal enabledelayedexpansion
set LF=^


rem ** The two empty lines are NECESSARY

SET REPOS=C:\Users\CH.ROSESOFT\Downloads\t3\repo
SET REV=40

SET MSG=
FOR /F %%i in ('svnlook log -r %REV% %REPOS%') do (
    SET "VAR=!VAR!!LF!%%i"
    SET "PAR=!PAR!^^!LF!!LF!%%i"
)
ECHO !VAR!
myProgram.exe !par!
票数 1
EN

Stack Overflow用户

发布于 2012-04-30 18:10:00

如果我正确理解了您的问题,您需要将svnlook命令的输出连接到单个变量中(类似于VAR = VAR & %%i)

在BAT中,您可以通过编写用%符号包装的变量来访问变量的内容。你只要把它们连在一起就可以了。SET X=%A%SET Y=%A%%B%。因此,在您的示例中,应该将SET赋值更改为类似于SET VAR=%VAR% %%i的值。

然而,这是行不通的。由于赋值位于FOR循环中,因此每次迭代都需要重新计算赋值。您需要启用延迟扩容。有关更多信息,请阅读HELP SET

类似这样的东西,

代码语言:javascript
复制
@ECHO OFF
setlocal enabledelayedexpansion
...
SET VAR=
FOR /F %%i in ('solook log -r %REV% %REPOS%') do SET VAR=!VAR! %%i
ECHO !VAR!
票数 1
EN

Stack Overflow用户

发布于 2012-05-05 05:24:25

如果没有分隔符,某些单词将会丢失

这是我刚刚写完的提交前脚本

如果将debug设置为1,那么它将一直失败,并且您将看到带有一些var输出的消息。

代码语言:javascript
复制
@echo off

set DEBUG=0

:::::::::::::::::::::::::: Dont touch this part :::::::::::::
setlocal enabledelayedexpansion
set space= 
set LF=^


rem ** The two empty lines are NECESSARY
:::::::::::::::::::::::::: Dont touch above     :::::::::::::

set REPOS=%1
set TXN=%2   

::: Get the author ::::::::::::::::::::::::::::::::::
set author=
For /F %%I in ('svnlook author %REPOS% -t %TXN%') Do Set author=!author!%%I

::: Get the message ::::::::::::::::::::::::::::::::::
set message=
For /F "delims=" %%I in ('svnlook log %1 -t %2') Do Set message=!message!%%I%space%


 :: Make sure that author is not blank or guest - if readonly accounts are enabled and something goes wrong
  echo %author% | FindStr [a-zA-Z0-9] >nul
  IF %ERRORLEVEL% NEQ 0 GOTO AUTHOR_NOT_OK

  echo %author% | FindStr \C:guest >nul
  IF %ERRORLEVEL% EQU 0 GOTO AUTHOR_NOT_OK
  :: %ERRORLEVEL% = 1 at this point means its no error!

  :: Make sure that the log message contains some text.
  echo "%message%" | FindStr [a-zA-Z0-9] >nul
  IF %ERRORLEVEL% NEQ 0 GOTO COMMENT_NOT_OK

  :: Make sure that the log message contains ACR
  echo "%message%" | FindStr /I /C:acr >nul
  IF %ERRORLEVEL% NEQ 0 GOTO COMMENT_NOT_OK

  GOTO OK

:COMMENT_NOT_OK
  echo COMMENT_NOT_OK 1>&2
  echo "D:\SYSAPPS\HATS\ci\repositories\repo\java\hooks\pre-commit.bat 1>&2
  echo Your commit has been blocked because you didn't provide adequate log message 1>&2
  echo Please write a log message describing the purpose of your changes and 1>&2
  echo then try committing again. -- Thank you 1>&2
  echo e.g. 1>&2
  echo ACR: 12345 1>&2
  echo fixed blah blah blah 1>&2
  if %DEBUG% EQU 1 GOTO EXITDEBUG

  exit 1

:AUTHOR_NOT_OK
  echo AUTHOR_NOT_OK 1>&2

:OK
  if %DEBUG% EQU 1 GOTO EXITDEBUG
  exit 0

:EXITDEBUG

  echo == EXITDEBUG == 1>&2
  echo ---- %AUTHOR% %message% ----  1>&2
  echo txn %TXN% repos %REPOS% 1>&2
  echo  changedpath  1>&2
  svnlook changed %REPOS% -t %TXN% 1>&2
  echo ERRORLEVEL %ERRORLEVEL% 1>&2
  echo "D:\SYSAPPS\HATS\ci\repositories\repo\java\hooks\pre-commit.bat" 1>&2
  exit 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10381572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档