2013-07-04 34 views
1

我在.NET 4.0控制台项目中使用SharpSvn.1.7-x64.1.7010.2403(由NuGet提供)。该SVN list命令是经常使用的我:SharpSVN:GetList命令省略了Uris,如果按修订版筛选

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/ 

最近我发现下面的神秘行为:使用修订过滤器我没有得到任何乌里了:-(

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信息)?

回答

1

.RepositoryRoot值并非真正由Subversion API提供。 SharpSvn知道,在大多数情况下,它可以从列表参数的第一个输出值中计算出来,除非在通过操作修订的特定情况下。

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

第二种形式的处理方式为SvnClient.List(new SvnUriTarget(uri,pegrev),...)以及计算工作。

然后通过结合来自RepositoryRoot和Path的知识形成Uri。 (如果你有RepositoryRoot的话,你可以自己做这些,但是在没有外部知识的情况下检索这个值是非常有用的,这就是SharpSvn只在知道它的情况下才提供的原因)

+0

感谢您的合格回答。我修改了我的请求到'client.GetList(新的SvnUriTarget(“https:// DEV:8443/svn/test /”,SvnRevision.Head),新的SvnListArgs(),out list)',它工作的很好。 – Marcel