1

我在 .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             |                                          |

那是一个错误吗?如果它不是一个错误,任何人都可以解释为什么?如何解决(希望不要在每个项目上调用 svn info)?

4

1 回答 1

1

Subversion api 并没有真正提供 .RepositoryRoot 值。SharpSvn 知道,在大多数情况下,它可以从 list 参数的第一个输出值计算出来,除非在这种特殊情况下传递有效修订。

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

第二种形式被处理为 SvnClient.List(new SvnUriTarget(uri, pegrev), ...) 并且计算工作。

然后通过结合来自 RepositoryRoot 和 Path 的知识来形成 Uri。(如果你在某个地方有 RepositoryRoot,你可以自己做这一切。但是在没有外部知识的情况下检索这个值是相当大的性能损失。这就是 SharpSvn 仅在它已经有知识的情况下才提供它的原因)

于 2013-07-06T23:27:15.130 回答