【问题标题】:SharpSVN: GetList command omits Uris if filtered by revisionSharpSVN:如果按修订过滤,GetList 命令会省略 Uris
【发布时间】:2013-07-04 16:46:52
【问题描述】:

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

【问题讨论】:

    标签: c# svn sharpsvn


    【解决方案1】:

    .RepositoryRoot 值并不是由 Subversion api 真正提供的。 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 仅在它已经拥有知识的情况下才提供它的原因)

    【讨论】:

    • 感谢您的合格回答。我将请求修改为client.GetList(new SvnUriTarget("https://DEV:8443/svn/test/", SvnRevision.Head), new SvnListArgs(), out list),它运行良好。干得好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多