Search code examples
windowsbatch-filesvncmdhook

SVN: Change log message only by author or admin


I have a problem with my pre-revprop-change. I want to allow changes to the log message, but only for the author himself OR a set admin. The code I've edited is this one: https://stackoverflow.com/a/18005347/16739479

I've edited this part, but it doesn't work as it should:

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 just write

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

everything works perfectly fine, but then the admin can't make changes. I also have tried just to write

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

but then it doesn't work as it should, it prints out the message within ERROR_WRONGUSER. I've also tried

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

not even this is working, also I've checked the output of %user% is exactly the same as the name, so actually it shouldn't jump to the ERROR_WRONGUSER.

Can somebody help me, I'm pretty confused.


Solution

  • set admin = muellerp is not the correct syntax.

    It should be set "admin=muellerp", else you create a variable with the name admin<space> and the content <space>muellerp

    A list of admins can be used by a small improvement, like:

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

    The IF-condition is true, if both sides are equal.
    But if the user exists in the list the right part will be different.

    Example:
    user=schmidt then !admin_list:,schmidt,=,###,! results to ,mueller,###,schulte,schmidtmeier,

    Then the complete code looks like

    @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