SVN pre-revprop-change钩子如何配置仅允许提交者或管理员修改日志
问题成因
- 批处理
set语句语法错误:你写的set admin = muellerp中等号两侧的空格会被识别为变量名和变量值的一部分,实际生成的变量名是admin(末尾带空格),变量值是muellerp(开头带空格),调用%admin%时无法匹配到正确的变量,返回空值,导致管理员身份判断永远不成立。 - 字符串比较引号不统一:你测试写死管理员账号的代码中,左侧变量用单引号包裹,右侧固定值用双引号包裹,批处理字符串比较会将引号本身纳入比较范围,两侧引号类型不一致必然导致匹配失败。
- 部分写法存在隐性空格问题:如果校验逻辑中
%user%变量前后存在多余空格,也会导致匹配失败。
修复方案
修正后的核心代码如下:
:: 等号两侧不要留空格,避免变量名/值带多余空格 set admin=muellerp set AUTHOR= for /f "delims=" %%a in ('svnlook author -r %REV% %REPOS%') do @set AUTHOR=%%a :: 字符串比较两侧统一用单引号,逻辑保持不变:不是作者也不是管理员就跳转错误 if /I not '%AUTHOR%'=='%user%' if /I not '%user%'=='%admin%' goto ERROR_WRONGUSER
如果需要兼容变量值内部存在空格的场景,可以将比较符两侧统一改用双引号包裹:
if /I not "%AUTHOR%"=="%user%" if /I not "%user%"=="%admin%" goto ERROR_WRONGUSER
单独验证管理员身份的正确写法:
set admin=muellerp if /I not '%user%'=='%admin%' goto ERROR_WRONGUSER
内容的提问来源于stack exchange,提问作者phil9
相关产品推荐
相关产品推荐

