SharpSVN:GetList命令在按版本筛选时省略Uris

时间:2013-07-04 16:46:53

标签: c# svn sharpsvn

我在.NET 4.0控制台项目中使用SharpSvn.1.7-x64.1.7010.2403(由NuGet提供)。经常使用svn list命令:

Collection<SvnListEventArgs> list;
client.GetList(new SvnUriTarget("https://dev:8443/svn/test/"), out list);
Console.WriteLine("Name            |Path            |Uri                                       |RepositoryRoot");
Console.WriteLine("-------------------------------------------------------------------------------------------------------");
foreach (var item in list)
    Console.WriteLine("{0,-16}|{1,-16}|{2,-42}|{3,-20}", item.Name, item.Path, item.Uri, item.RepositoryRoot);

输出以下内容:

Name            |Path            |Uri                                       |RepositoryRoot
-------------------------------------------------------------------------------------------------------
                |                |https://dev:8443/svn/test/                |https://dev:8443/svn/test/
IAmImportant.txt|IAmImportant.txt|https://dev:8443/svn/test/IAmImportant.txt|https://dev:8443/svn/test/
Properties.txt  |Properties.txt  |https://dev:8443/svn/test/Properties.txt  |https://dev:8443/svn/test/
sub             |sub             |https://dev:8443/svn/test/sub/            |https://dev:8443/svn/test/

最近我发现了以下神秘行为:使用修订版过滤器我不再使用Uri: - (

client.GetList(new SvnUriTarget("https://DEV:8443/svn/test/"), new SvnListArgs { Revision = SvnRevision.Head }, out list);

输出:

Name            |Path            |Uri                                       |RepositoryRoot
-------------------------------------------------------------------------------------------------------
                |                |                                          |
IAmImportant.txt|IAmImportant.txt|                                          |
Properties.txt  |Properties.txt  |                                          |
sub             |sub             |                                          |

这是一个错误吗?如果它不是一个bug,任何人都可以解释原因吗?如何解决(希望不在每个项目上调用svn信息)?

1 个答案:

答案 0 :(得分:1)

Subversion api并不真正提供.RepositoryRoot值。 SharpSvn知道在大多数情况下,它可以从list参数的第一个输出值计算,除非你通过了一个有效修订的特定情况。

请注意svn list URL -r 123和svn list URL @ 123之间的区别。第一个查看URL,因为它在头版本中已知,并将其原点追溯到版本123,其中它可能以不同的名称存在。第二个检查修订版123中URL的内容。 (如果有疑问,你很可能想要第二种形式......有关详细信息,请参阅颠覆书)

第二种形式作为SvnClient.List(新的SvnUriTarget(uri,pegrev),......)处理,并且计算有效。

然后通过组合RepositoryRoot和Path的知识形成Uri。 (如果你在某个地方有RepositoryRoot,你可以自己完成所有这些。但是在没有外部知识的情况下检索这个值是一个很大的性能损失。这就是SharpSvn提供它的原因,只有在它已经知道的情况下)