我希望这不是太模糊。我正在编写一个应用程序,在我们的SVN服务器上的post-commit钩子上运行。当我请求存储库URI时,我有时会得到一个与我的提交路径不匹配的答案。
以下是我如何获得提交args(编辑以添加更多详细信息):
public Collection<SvnLogEventArgs> GetCommitArgs(string strUri, long lngRevision)
{
try
{
using (SvnClient client = new SvnClient())
{
SvnLogArgs args = new SvnLogArgs();
Collection<SvnLogEventArgs> col;
args.Start = lngRevision;
args.End = lngRevision;
bool bolGotLog = client.GetLog(new Uri(strUri), args, out col);
return col;
}
}
catch
{
return null;
}
}
但是这里我是如何获得repo URI的(GetRepository()基本上只是将其重新格式化为URL):
colCommitArgs = GetCommitArgs(args[0], long.Parse(args[1]));
strRepository = GetRepository(args[0] + "/" + colCommitArgs[0].ChangedPaths[0].RepositoryPath.ToString());
args[0]
实际上是指从提交传递的args集。我发现ChangedPaths有时是空的。
例如,如果我提交C:/Repositories/a_repo/somefolder/example.txt,我从SVN commit args返回的值只是C:/Repositories/a_repo/
。这可能是我们SVN设置的问题(或者我对其缺乏了解)。为什么有些文件夹被视为存储库而其他文件夹只被视为文件夹?有没有办法指定文件夹不仅仅是一个文件夹?或者SharpSVN有不同的方式来获取承诺文件夹?我目前在原始URI的末尾连接ChangedPaths[0].RepositoryPath
。
答案 0 :(得分:0)
我对您使用的C#库了解不多,但从一般的Subversion角度来看,您通常需要使用两个不同的版本号来查看更改。尝试使用args.Start = lngRevision - 1;
,看看会发生什么。