2016-05-25 3 views
0

Я просмотрел следующее сообщение (SharpSVN: Getting Repository Structure and Individual Files) и может успешно получить структуру моего репозитория только на основном уровне. Что мне нужно сделать, так это получить структуру ENTIRE для каждой папки/подпапки под основным уровнем. Это код, который я до сих пор:SharpSVN: Получение всей структуры репозитория

Dim svnUrl As String = "https:\\SVN MAIN LEVEL REPOSITORY" 
    Using svnClient As New SvnClient() 
     Dim contents As Collection(Of SvnListEventArgs) 
     Dim files As New List(Of String)() 
     If svnClient.GetList(New Uri(svnUrl), contents) Then 
      For Each item As SvnListEventArgs In contents 
       'files.Add(item.Path) 
       ListBox1.Items.Add(item.Path) 
       TreeView1.Nodes.Add(item.Path) 
      Next 
     End If 
    End Using 

Что мне не хватает, или мне нужно рекурсивно вызвать функцию и передать в уровнях?

ответ

1

Я закончил тем, что писал мой собственный рекурсивный суб-за специфических требований, которые я имел:

If svnClient.GetList(New Uri(svnUrl), contents) Then 
      ReDim Preserve node_array(UBound(node_array) + 1) 
      node_array(UBound(node_array)) = LibraryNode.Text 
      For Each SubFolder As SvnListEventArgs In contents 
       Dim MainNode As TreeNode = New TreeNode(SubFolder.Name) 
       If SubFolder.Name <> "My Top Level Folder" Then 
        ReDim Preserve node_array(UBound(node_array) + 1) 
        node_array(UBound(node_array)) = LibraryNode.Text & "\" & MainNode.Text 

        Dim thelevel As String = LibraryNode.Text & "\" & MainNode.Text 
        LibraryNode.Nodes.Add(MainNode) 
        currentlevel = 0 
        FillTreeViewNodesSVN(SubFolder.Uri.ToString, MainNode, svnClient, thelevel, currentlevel) 
       End If 
      Next 
     End If 

выше называет рекурсии суб:

Public Sub FillTreeViewNodesSVN(ByVal SubFolder As String, ByVal MainNode As TreeNode, ByVal svnClient As SvnClient, ByVal thelevel As String, ByVal currentlevel As Integer) 

    Dim contents As Collection(Of SvnListEventArgs) 
    Dim files As New List(Of String)() 
    If svnClient.GetList(New Uri(SubFolder), contents) Then 
     For Each item As SvnListEventArgs In contents 
      If item.Uri.ToString <> SubFolder And InStr(item.Uri.ToString, "tag") > 0 Then 
       Dim SubNode As TreeNode = New TreeNode(item.Name) 
       ReDim Preserve node_array(UBound(node_array) + 1) 
       node_array(UBound(node_array)) = thelevel & "\" & SubNode.Text 

       thelevel = thelevel & "\" & SubNode.Text 
       currentlevel = currentlevel + 1 
       If currentlevel < 2 Then 
        FillTreeViewNodesSVN(item.Uri.ToString, SubNode, svnClient, thelevel, currentlevel) 
       End If 
       currentlevel = currentlevel - 1 
       thelevel = thelevel.Replace("\" & SubNode.Text, "") 
      End If 
     Next 
    End If 


End Sub 

совместили 2 создать список узлов из папки 2 уровня в глубину ТОЛЬКО в папке TAGS. Это дает мне все развернутые TAG для данного проекта.

1

Вы можете передать SvnDepth.Infinite на свойство Depth дополнительного объекта args, который вы можете передать в .GetList.

Но будьте осторожны при вызове этой функции в корне действительно огромного хранилища, поскольку все кэшируется в ram, прежде чем вы увидите первые результаты.

Использование функции .List() с функцией обратного вызова сообщает результаты, пока они поступают, что позволяет GC выпускать элементы, как только вы закончите.

Смежные вопросы