我知道这个问题已经在SO上得到了回答,但答案只是删除了钩子。我需要修复钩子而不是删除它。
我们在Windows 2012上使用Win 7客户端运行VisualSVN Server。我的任务是禁止窃取锁(我知道这不是SVN的最佳实践,但是老板们想要它)。这是我目前为我们的预锁定钩子(在网上找到)提供的.bat文件:
@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 rev_path=%2
set userName=%3
:: If a lock exists and is owned by a different person, don't allow it
:: to be stolen (e.g., with 'svn lock --force ...').
FOR /F "delims=: tokens=1*" %%a IN ('svnlook lock "%repository%" "%rev_path%"') DO if %%a==Owner (set LOCK_OWNER=%%b)
:: If we get no result from svnlook, there's no lock, allow the lock to
:: happen:
if "%LOCK_OWNER%"=="" (
exit /b 0
)
:: If the person locking matches the lock's owner, allow the lock to
:: happen:
if "%LOCK_OWNER%" = " %username%" (
exit /b 0
)
:: Otherwise, we've got an owner mismatch, so return failure:
echo "Error: %rev_path% already locked by %LOCK_OWNER%." >&2
exit /b 1
我也尝试使用SharpSVN编写应用程序(我之前用它来创建一个post-commit钩子)。 .bat文件和我的SharpSVN脚本都返回同样的错误:
Lock token URI '
C:\Program Files\VisualSVN Server>"C:\Program Files\VisualSVN
Server\bin\VisualSVNServerHooks.exe" case-insensitive
-tC:\Repositories\DIT_TEST /go-home.txt Jeremy.Coulson
C:\Program Files\VisualSVN Server>C:\SVNAdmin\SVNPreLockHook.bat
C:\Repositories\DIT_TEST /go-home.txt Jeremy.Coulson
' has bad scheme; expected 'opaquelocktoken'
If you want to break the lock, use the 'Check For Modifications' dialog or the repository browser.
以下是我们的Visual SVN服务器中的设置:
我在想我必须以某种方式将此opaquelocktoken
提供给钩子脚本,但我不确定如何。
答案 0 :(得分:0)
如果您的问题仍然存在,我可以采用以下方法来避免这种情况。
根本原因是SVN将采取任何"回声"作为锁定前阶段的锁定令牌。
为了避免这种情况,我要在vbs文件(Visual Basic Script)中编写预锁定挂钩,这些挂钩将从pre-lock.bat挂钩文件运行。
运行脚本的pre-lock.bat文件就像这样
@echo off
Wscript somescript.vbs %1 %2 %3 %4 %5
@echo on
请注意,您 使用" Wscript"而不是" Cscript"
当需要使用脚本结果作为退出条件时,
@echo off
FOR /F "usebackq tokens=*" %%r in (`Cscript %1\hooks\somescript.vbs %1 %2 %3 %4 %5`) DO set res=%%r
@echo on
@exit %res%
将值传递回.bat文件的vbs方式是: Wscript.Echo some_value