SVN:仅由作者或管理员更改日志消息

SVN: Change log message only by author or admin

我的 pre-revprop-change 有问题。我想允许更改日志消息,但仅限于作者本人或一组管理员。 我编辑的代码是这个:

我已经编辑了这部分,但它不能正常工作:

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%'goto ERROR_WRONGUSER

一切正常,但管理员无法进行更改。 我也试过只写

if /I not '%user%'=='%admin%' goto ERROR_WRONGUSER

但随后它无法正常工作,它在 ERROR_WRONGUSER 中打印出消息。我也试过

if /I not '%user%'=="muellerp" goto ERROR_WRONGUSER

即使这不起作用,我也检查过 %user% 的输出与名称完全相同,所以实际上它不应该跳转到 ERROR_WRONGUSER。

谁能帮帮我,我很困惑。

set admin = muellerp 语法不正确。

它应该是 set "admin=muellerp",否则你创建一个名称为 admin<space> 且内容为 <space>muellerp

的变量

可以通过一个小的改进来使用管理员列表,例如:

set "admin_list=,mueller,schmidt,schulte,schmidtmeier,"    
if "!admin_list!" == "!admin_list:,%user%,=,###,!" echo Not an admin

如果两边相等,则 IF 条件为真。
但如果用户存在于列表中,则右侧部分会有所不同。

示例:
user=schmidt 然后 !admin_list:,schmidt,=,###,! 结果为 ,mueller,###,schulte,schmidtmeier,

那么完整的代码是这样的

@echo off
setlocal EnableDelayedExpansion
set "admin_list=,muellera,zernacka,"
set "AUTHOR="
for /f "delims=" %%a in ('svnlook author -r %REV% %REPOS%') do set "AUTHOR=%%a"
if /I not "!AUTHOR!" == "!user!" goto :user_accepted
if not "!admin_list!" == "!admin_list:,%user%,=,###,!" goto :user_accepted

echo "!user!" is not accepted
exit /b 1

:user_accepted