美文网首页
SVN配置可修改已提交记录的备注(基于Window系统)

SVN配置可修改已提交记录的备注(基于Window系统)

作者: moutory | 来源:发表于2023-12-14 19:55 被阅读0次

前言

本文主要讲怎么开启SVN服务端如何配置允许用户修改已提交记录的备注信息,以及相关的脚本说明。纯干货分享,希望对各位读者有所帮助

默认情况下,SVN是不允许修改已提交记录的备注信息的,如果尝试修改svn服务端会返回以下信息:

Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook

如需启用,可以按照以下步骤进行操作

步骤一:切换到svn仓库的目录中,进入hook目录
image.png
步骤二:新建pre-revprop-change.bat文件

进入hook目录中后,我们可以看见里面有很多*.tmpl文件,这些是各种钩子脚本的模板,主要是给管理员配置参考的。钩子模板里面的脚本似乎还是shell脚本,也不适合window直接使用,但是里面有着钩子函数的详细入参,如果要进行个性化的配置的话,是需要认真看模板中的参数内容的。
然后我们在hook目录中新建pre-revprop-change.bat文件即可

image.png
步骤三:脚本中写入校验内容

这里的内容仅作为参考,个人觉得已经可以满足大部分场景的需要了

脚本首先是接收了钩子函数传递过来的五个参数,分别是仓库名repository、版本号repository、用户名userName、修改内容propertyName、操作动作action

  • 校验1:判断修改的内容是否是备注内容,是的话进入下一个校验,否的话直接退出
  • 校验2:判断动作是否属于修改操作,是的话进入下一个校验,否的话直接退出
  • 校验3:判断修改人是否是原记录提交者,是的话进入下一个校验,否的话直接退出
  • 校验4:判断修改的新备注内容是否不为空,是的话则通过,否的话直接退出

所有因校验失败而退出的操作都会把相关的提示语返回给客户端~

@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5

:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME

:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION

:: Only allow editing of the same user.
for /f "tokens=*" %%a in ( 
'"%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %revision% %repository%') do ( 
set orgAuthor=%%a
)
if /I not "%userName%" == "%orgAuthor%" goto ERROR_SAME_USER

:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY

goto :eof

:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT

:ERROR_SAME_USER
echo Only the same user can change his code. >&2
goto ERROR_EXIT

:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1

这里需要特别注意,pre-revprop-changeSVN版本控制系统中的一个钩子(hook),用于在尝试修改版本属性(revision property)之前执行自定义的操作和验证。常见的版本属性包括版本提交者、提交时间、修改日志等,不仅仅局限在修改提交备注信息上面,所以如果启用这个钩子,一定要记得做好相关的防护校验,避免版本信息被恶意修改!!!


2023-12-18补充
这里针对不允许修改超过3个月前的记录,来单独给一下脚本吧,bat脚本来实现会稍微复杂一点。因为原生的bat脚本语法有点弱鸡,如果加上具体日期判断的话就太复杂了,所以下面的脚本只是精确到月份而已,如果有更好的方式也欢迎交流。
若脚本对你有帮助也欢迎点赞支持~

:: Only allow editing the records within the last three months.
for /f "tokens=*" %%a in ( 
'"%VISUALSVN_SERVER%\bin\svnlook.exe" date -r %revision% %repository%') do ( 
set orgDate=%%a
)
set "orgFormatDate=%orgDate:~0,10%"
:: Get date of origin record
    for /F "tokens=1-3 delims=-" %%A in ("%orgFormatDate%") do (
    set /a "ORG_FORMAT_YEAR=%%A"
    set  "ORG_FORMAT_MONTH=%%B"
)
:: Transfer string to number
set /a ORG_FORMAT_MONTH=1%ORG_FORMAT_MONTH% - 100

:: Get date before 3 months
set CURRENT_DATE=%DATE:~0,10%
for /F "tokens=1-3 delims=/" %%A in ("%CURRENT_DATE%") do (
    set "CURRENT_YEAR=%%A"
    set "CURRENT_MONTH=%%B"
)
set /a THREE_MONTHS_AGO_MONTH=1%CURRENT_MONTH%-103
if %THREE_MONTHS_AGO_MONTH% LEQ 0 (
    set /a THREE_MONTHS_AGO_MONTH+=12
    set /a THREE_MONTHS_AGO_YEAR=%CURRENT_YEAR%-1
) else (
    set /a THREE_MONTHS_AGO_YEAR=%CURRENT_YEAR%
)

if %ORG_FORMAT_YEAR% LSS %THREE_MONTHS_AGO_YEAR% (
    goto ERROR_EXCEED_TIME_LIMIT
) else if %ORG_FORMAT_YEAR% EQU %THREE_MONTHS_AGO_YEAR% (
    if %THREE_MONTHS_AGO_MONTH% GTR %ORG_FORMAT_MONTH% (
        goto ERROR_EXCEED_TIME_LIMIT
    )
) 

:ERROR_EXCEED_TIME_LIMIT
echo Only could update the comment within three months. >&2
goto ERROR_EXIT


:ERROR_EXIT
exit /b 1

参考文章:
https://stackoverflow.com/questions/197224/what-is-a-pre-revprop-change-hook-in-svn-and-how-do-i-create-it

相关文章

  • SVN配置与迁移

    window备份 发送到Linux服务器 Linux安装SVN 创建SVN项目 导入备份 修改配置1、进入目录 2...

  • svn迁移到gitlab

    yum install -y git-svn 如果想保留提交记录,可以用下面的命令找到: 修改格式: 从svn上...

  • 日报(20170704)-clover

    最近老大让整理svn上开发提交代码等一些变更日志,今天整理出来一份,主要包含版本号,修改人,修改时间,修改的备注,...

  • 配置管理系统,变更控制,记录管理系统

    配置管理系统主要是:配置识别,配置记录,配置核实和审计 配置管理主要记录技术相关的,还有SVN,JIRA都是配置管...

  • Android Studio 与 SVN部分

    AS 与 SVN 关联的状态 白色 已经提交但没有修改 蓝色 已经修改未提交 红色 ...

  • svn使用

    查看修改过哪些文件 文件夹回滚 提交代码文件 4.修改代码提交 删除svn已经存在文件,然后svn ci -m "...

  • centos 配置svn服务自启动

    停止svn服务 查看配置文件位置 修改配置文件中svn库地址 假设svn库地址在/var/svn目录下。 配置sv...

  • 无标题文章

    # SVN 代码提交规范 --- [TOC] ## 1. 提交前配置忽略文件 首次提交前需要先配置忽略文件,防止将...

  • 【git】实用命令

    修改已提交分支的备注信息:git commit --amend

  • iOS Corner Stone钩子阻塞error

    问题:SVN ,用cornerstone提交代码时,点击commit,填写提交备注时,如果填写内容没有或者太少,c...

网友评论

      本文标题:SVN配置可修改已提交记录的备注(基于Window系统)

      本文链接:https://www.haomeiwen.com/subject/dyrwgdtx.html