我有一个版本控制系统(VisualSVN),它可以运行一个pre-commit-hook。我想它使用cmd.exe
作为解释器。
我的钩子目前正在执行以下操作(检查最小消息长度):
setlocal enabledelayedexpansion
SET REPOS=%1
SET TXN=%2
SET SVNLOOK="$VISUALSVN_SERVER%\bin\svnlook.exe"
%SVNLOOK% log -t %TXN% %REPOS% | findstr .......... > nul
IF %errorlevel% gtr 0 (goto ERROR_TOO_SHORT)
goto NORMAL_EXIT
:ERROR_TOO_SHORT
echo Commit message too short 1>&2
exit 1
:NORMAL_EXIT
exit 0
字符串
我想添加一个正则表达式检查。消息应该满足这两个表达式中的至少一个,以便被一些bash脚本解析。
\[((Issue|Resolves|Closes|Solves)[:=]\s?)?#?([0-9]+)\]
\[[nN]o?-?[uU](ser)?-?[iI](mpact)?\]
型
不幸的是,我阅读到这些对于findstr
来说太复杂了,所以我需要调用PowerShell。
一个可以工作的powershell表达式是:
[bool]( <Get stdin here> |
Select-String -CaseSensitive -Quiet
-Pattern '\[(((Issue|Resolves|Closes|Solves)[:=]\s?)?#?([0-9]+))|([nN]o?-?[uU](ser)?-?[iI](mpact)?)\]
)
型
这是在行动:
> $good1 = [bool](echo "[NUI] test message" |
>> Select-String -CaseSensitive -Quiet
>> -Pattern '\[(((Issue|Resolves|Closes|Solves)[:=]\s?)?#?([0-9]+))|([nN]o?-?[uU](ser)?-?[iI](mpact)?)\]
>> )
> $good2 = [bool](echo "[Closes=1234] test message" |
>> Select-String -CaseSensitive -Quiet
>> -Pattern '\[(((Issue|Resolves|Closes|Solves)[:=]\s?)?#?([0-9]+))|([nN]o?-?[uU](ser)?-?[iI](mpact)?)\]
>> )
> $bad = [bool](echo "This is an invalid message" |
>> Select-String -CaseSensitive -Quiet
>> -Pattern '\[(((Issue|Resolves|Closes|Solves)[:=]\s?)?#?([0-9]+))|([nN]o?-?[uU](ser)?-?[iI](mpact)?)\]
>> )
> echo $good1
True
> echo $good2
True
> echo $bad
False
型
我需要弄清楚如何将%SVNLOOK%
的输出导入PowerShell,调用命令,设置退出代码,然后在脚本中使用该退出代码。
我尝试了这个简化的例子,检查stdin是否包含H
,但PowerShell显然不是bash
:
> echo "Hello" | PowerShell -Command "[bool]([Console]:In | Select-String -CaseSensitive -Quiet -Pattern 'H')"
> echo %errorlevel%
0
> echo " ello" | PowerShell -Command "[bool]([Console]:In | Select-String -CaseSensitive -Quiet -Pattern 'H')"
> echo %errorlevel%
0 <-- Expected 1
型
我在这里尝试了一些事情,我认为[Console]::In
没有将Hello
转发到Select-String
。
1条答案
按热度按时间fcwjkofz1#
我想明白了
首先,要获取PowerShell的stdin,需要使用
$Input
。仍然不确定这是环境变量、管道还是进程。字符串
接下来,我们需要使用该输出设置
%errorlevel%
。我们可以使用exit
并使用!
运算符返回匹配为0
:型
消极也起作用:
型