我如何找到SharpSVN的锁所有者?

我如何找到SharpSVN的锁所有者?,svn,tortoisesvn,sharpsvn,Svn,Tortoisesvn,Sharpsvn,我们正在Windows 2012上运行VisualSVN。我的任务是防止偷锁。我想使用预解锁挂钩。首先,我想比较锁所有者的名称和锁破坏用户的名称。我可以通过svnlook在服务器上找到锁所有者: svnlook lock C:\Repositories\DIT_TEST time-for-a-sandwich.txt 这给了我一个小的信息列表,其中包括所有者。酷 我想在SharpSVN中复制这一点。以下是我目前掌握的情况: using (SvnClient client = new SvnCl

我们正在Windows 2012上运行VisualSVN。我的任务是防止偷锁。我想使用预解锁挂钩。首先,我想比较锁所有者的名称和锁破坏用户的名称。我可以通过
svnlook
在服务器上找到锁所有者:

svnlook lock C:\Repositories\DIT_TEST time-for-a-sandwich.txt
这给了我一个小的信息列表,其中包括所有者。酷

我想在SharpSVN中复制这一点。以下是我目前掌握的情况:

using (SvnClient client = new SvnClient())
{
    StringBuilder sbLockOwner = new StringBuilder();
    Collection<SvnListEventArgs> col;
    if (client.GetList(new Uri("https://dit-visualsvn/svn/DIT_TEST"), out col))
    {
        foreach (SvnListEventArgs svnListEventArg in col)
        {
            sbLockOwner.Append(svnListEventArg.Lock.Owner.ToString());
        }
    }
}
我已经验证了我的用户对存储库具有读/写权限,并且我已经尝试使用
client.Authentication.ForceCredentials(“login”,“pswd”)解决方案。仍然不允许

如何通过SharpSVN获取锁所有者的姓名


更多信息:如果我将代码更改为上的响应,我仍然会看到访问被禁止。

如果要使用SharpSvn复制“svnlook”,您应该先查看
SvnLookClient

我猜您在visualsvn服务器上使用的是Windows/integrated security,而这(通常)在不同凭据下运行的服务器进程中不起作用。但是,当您处于存储库挂钩中时,您不需要凭据,因为您可以访问物理文件

但是您遇到了一个问题,
svnlook锁
尚未在
svnlook客户端
上实现

在这一点上,我通常会开始查看
svnadmin
命令,以查看是否存在与
svnlook
svnadmin
工作在同一层上的等效命令。在这种情况下,您会发现
svnadmin lslocks
svnadmin lock
svnadmin unlock
。。。但是继续在SharpSvn的svnadmin上进行搜索,比如
SvnRepositoryClient
,您也找不到这些命令


在这一点上,我切换到一个不同的回答模式。该功能尚未在SharpSvn中使用。但到目前为止,它已在上一个SharpSvn版本中提供


您现在应该能够使用

void Main(字符串[]args)
{
SvnHookArguments ha;
if(!SvnHookArguments.ParseHookArguments)(args、SvnHookType.PreUnlock、Console.In、out ha)
{
Console.Error.Writeline(“错误参数”);
环境。出口(1);
}
使用(SvnLookClient look=new SvnLookClient())
{
svnlockinfolck;
look.GetLock(ha.LookOrigin、ha.Path、out-lck);
if(lck==null)
return;//未锁定???
//所有者现在包含旧所有者
//ha.User新用户
}
}

但是我猜您也希望实现一个.PreLock钩子,因为我通常在自己获得锁时打破锁…而不是解锁。

如果您想使用SharpSvn复制“svnlook”,您应该从查看
SvnLookClient
开始

我猜您在visualsvn服务器上使用的是Windows/integrated security,这(通常)在不同凭据下运行的服务器进程中不起作用。但是,当您处于存储库挂钩中时,您不需要凭据,因为您可以访问物理文件

但是您遇到了一个问题,
svnlook锁
尚未在
svnlook客户端
上实现

在这一点上,我通常会开始查看
svnadmin
命令,看看是否有与
svnlook
svnadmin
工作在同一层上的等效命令。在这种情况下,您会发现
svnadmin lslocks
svnadmin lock
svnadmin unlock
…但继续搜索锐器vn的svnadmin类似于
SvnRepositoryClient
您也找不到这些命令


在这一点上,我切换到了一个不同的应答模式。该功能还没有在SharpSvn中。但到目前为止,它在上一个SharpSvn版本中可用


您现在应该能够使用

void Main(字符串[]args)
{
SvnHookArguments ha;
if(!SvnHookArguments.ParseHookArguments)(args、SvnHookType.PreUnlock、Console.In、out ha)
{
Console.Error.Writeline(“错误参数”);
环境。出口(1);
}
使用(SvnLookClient look=new SvnLookClient())
{
svnlockinfolck;
look.GetLock(ha.LookOrigin、ha.Path、out-lck);
if(lck==null)
return;//未锁定???
//所有者现在包含旧所有者
//ha.User新用户
}
}

但我猜你也希望实现一个.PreLock钩子,因为我通常在自己获得锁时打破锁…而不是解锁。

这看起来很有希望。我今天将尝试新版本。是的,也许我确实需要做一个PreLock钩子。基本上,我们有团队成员希望我禁用偷锁。我一直在尝试若要使用此选项,我会不断收到一个错误,即定位的程序集的清单定义与程序集引用不匹配。
我已将其删除并重新添加到不同的项目中,并且我似乎总是会想到这一点。我可能仍然在做一些错误的事情,但我很好奇您是否意识到任何此类问题。没有实际的错误很难猜出是什么原因导致的。它看起来像是一个程序集不匹配,但是很容易通过不安装正确的VisualC++运行时而引起这样的问题。根据SARPSVN的构建,这可能是VS2008或VS2010、X86或X64版本。如果使用VNS++组件,则需要VS2008版本,而您需要VS20。如果使用.Net 4.0+程序集,则为10版本。如果在.Net 4.0+安装程序中使用2.0+版本,则在应用程序配置文件中需要特定的配置选项(如错误消息所述)。这看起来很有希望。我今天将尝试新版本。是的,也许我确实需要做一个预锁钩子。基本上,我们的团队成员希望我禁用锁的窃取。我一直在尝试使用它,但我不断得到一个错误,
定位程序集的清单定义没有
Unable to connect to a repository at URL 'https://dit-visualsvn/svn/DIT_TEST' --->
Access to '/svn/DIT_TEST' forbidden.