2016-05-25 23 views
0

Ich schaute auf den folgenden Beitrag (SharpSVN: Getting Repository Structure and Individual Files) und kann die Struktur meines Repositorys nur auf der Hauptebene erhalten. Was ich tun muss, ist die GESAMTE Struktur für jeden Ordner/Unterordner unter der Hauptebene zu bekommen. Dies ist der Code, den ich bisher habe:SharpSVN: Erhalten der gesamten Repository-Struktur

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 

Was bin ich fehlt oder muss ich rekursiv die Funktion aufrufen und in den Ebenen passieren?

Antwort

1

endete ich aufgrund der spezifischen Anforderungen meiner eigenen rekursiven Unter bis zu schreiben hatte ich:

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 

Die oben ruft die Rekursion sub:

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 

kombiniert, um die 2 einen Knoten Liste der erstellen Ordner 2 Ebenen tiefer als NUR der TAGS-Ordner. Dadurch bekomme ich alle bereitgestellten TAGs für ein bestimmtes Projekt.

1

Sie können SvnDepth.Infinite für die Depth-Eigenschaft des optionalen args-Objekts übergeben, die Sie an .GetList übergeben können.

Aber seien Sie vorsichtig mit dem Aufruf dieser Funktion auf der Wurzel eines wirklich riesigen Repository als alles im RAM zwischengespeichert wird, bevor Sie die ersten Ergebnisse sehen würden.

Die Verwendung von .List() mit einer Callback-Funktion meldet Ergebnisse, wenn sie eintreffen, sodass der GC die Elemente freigeben kann, sobald Sie fertig sind.