Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SharpSVN:获取整个存储库结构_Sharpsvn - Fatal编程技术网

SharpSVN:获取整个存储库结构

SharpSVN:获取整个存储库结构,sharpsvn,Sharpsvn,我看了下面的文章(),并且只能在主级别成功地获得我的存储库的结构。我需要做的是获取主级别下每个文件夹/子文件夹的整个结构。这是我目前掌握的代码: Dim svnUrl As String = "https:\\SVN MAIN LEVEL REPOSITORY" Using svnClient As New SvnClient() Dim contents As Collection(Of SvnListEventArgs) Dim files As N

我看了下面的文章(),并且只能在主级别成功地获得我的存储库的结构。我需要做的是获取主级别下每个文件夹/子文件夹的整个结构。这是我目前掌握的代码:

 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

我遗漏了什么,或者我需要递归调用函数并在级别中传递吗?

您可以在可选args对象的Depth属性上传递SvnDepth.Infinite,您可以传递给.GetList

但是在一个非常庞大的存储库的根上调用这个函数时要小心,因为在看到第一个结果之前,所有内容都缓存在ram中


将.List()与回调函数一起使用会在结果到达时报告结果,从而允许GC在完成后立即释放项目。

您可以在可传递给.GetList的可选args对象的Depth属性上传递SvnDepth.Infinite

但是在一个非常庞大的存储库的根上调用这个函数时要小心,因为在看到第一个结果之前,所有内容都缓存在ram中


使用带有回调函数的.List()可以在结果到达时报告结果,从而允许GC在您完成后立即释放项。

由于我的特定要求,我最终编写了自己的递归sub:

 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
如果svnClient.GetList(新Uri(svnUrl),则
ReDim保留节点数组(UBound(节点数组)+1)
node_数组(UBound(node_数组))=LibraryNode.Text
对于每个子文件夹,在目录中作为SvnListEventArgs
Dim MainNode As TreeNode=新的TreeNode(SubFolder.Name)
如果子文件夹名为“我的顶级文件夹”,则
ReDim保留节点数组(UBound(节点数组)+1)
node\u数组(UBound(node\u数组))=LibraryNode.Text&“\”&MainNode.Text
将级别设置为String=LibraryNode.Text&“\”&MainNode.Text
LibraryNode.Nodes.Add(主节点)
currentlevel=0
FillTreeViewNodesVn(子文件夹.Uri.ToString,主节点,svnClient,级别,当前级别)
如果结束
下一个
如果结束
上面调用递归子函数:

  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
Public Sub-filltreeviewnodesvn(ByVal子文件夹作为字符串,ByVal main节点作为树节点,ByVal svnClient作为svnClient,ByVal thelevel作为字符串,ByVal currentlevel作为整数)
作为集合的Dim内容(SvnListEventArgs)
将文件变暗为新列表(字符串)()
如果是svnClient.GetList(新Uri(子文件夹)、内容),则
对于目录中作为SvnListEventArgs的每个项目
如果item.Uri.ToString子文件夹和InStr(item.Uri.ToString,“tag”)>0,则
作为TreeNode的Dim子节点=新TreeNode(item.Name)
ReDim保留节点数组(UBound(节点数组)+1)
node\u数组(UBound(node\u数组))=级别&“\”和子节点.Text
级别=级别和子节点。文本
currentlevel=currentlevel+1
如果当前电平<2,则
FillTreeViewNodesVn(item.Uri.ToString,子节点,SVN客户端,级别,当前级别)
如果结束
currentlevel=currentlevel-1
级别=级别.Replace(“\”&SubNode.Text,”)
如果结束
下一个
如果结束
端接头

结合2创建文件夹的节点列表,仅标记文件夹的2级深度。这将获取给定项目的所有已部署标记

由于我的特定需求,我最终编写了自己的递归sub:

 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
如果svnClient.GetList(新Uri(svnUrl),则
ReDim保留节点数组(UBound(节点数组)+1)
node_数组(UBound(node_数组))=LibraryNode.Text
对于每个子文件夹,在目录中作为SvnListEventArgs
Dim MainNode As TreeNode=新的TreeNode(SubFolder.Name)
如果子文件夹名为“我的顶级文件夹”,则
ReDim保留节点数组(UBound(节点数组)+1)
node\u数组(UBound(node\u数组))=LibraryNode.Text&“\”&MainNode.Text
将级别设置为String=LibraryNode.Text&“\”&MainNode.Text
LibraryNode.Nodes.Add(主节点)
currentlevel=0
FillTreeViewNodesVn(子文件夹.Uri.ToString,主节点,svnClient,级别,当前级别)
如果结束
下一个
如果结束
上面调用递归子函数:

  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
Public Sub-filltreeviewnodesvn(ByVal子文件夹作为字符串,ByVal main节点作为树节点,ByVal svnClient作为svnClient,ByVal thelevel作为字符串,ByVal currentlevel作为整数)
作为集合的Dim内容(SvnListEventArgs)
将文件变暗为新列表(字符串)()
如果是svnClient.GetList(新Uri(子文件夹)、内容),则
对于目录中作为SvnListEventArgs的每个项目
如果item.Uri.ToString子文件夹和InStr(item.Uri.ToString,“tag”)>0,则
作为TreeNode的Dim子节点=新TreeNode(item.Name)
ReDim保留节点数组(UBound(节点数组)+1)
node\u数组(UBound(node\u数组))=级别&“\”和子节点.Text
级别=级别和子节点。文本
currentlevel=currentlevel+1
如果当前电平<2,则
FillTreeViewNodesVn(item.Uri.ToString,子节点,SVN客户端,级别,当前级别)
如果结束
currentlevel=currentlevel-1
级别=级别.Replace(“\”&SubNode.Text,”)
如果结束
下一个
如果结束
端接头
结合2创建文件夹的节点列表,仅标记文件夹的2级深度。这将获取给定项目的所有已部署标记