【问题标题】:SharpSVN: Getting Entire Repository StructureSharpSVN:获取整个存储库结构
【发布时间】:2016-05-31 20:10:47
【问题描述】:

我查看了以下帖子(SharpSVN: Getting Repository Structure and Individual Files),并且只能在主级别成功获取我的存储库的结构。我需要做的是获取主级别下每个文件夹/子文件夹的整个结构。这是我到目前为止的代码:

 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

我缺少什么或者我需要递归调用函数并传入关卡?

【问题讨论】:

    标签: sharpsvn


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

       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 创建仅 TAGS 文件夹的 2 层深的文件夹的节点列表。这让我获得了给定项目的所有已部署标签。

      【讨论】:

        猜你喜欢
        • 2011-02-22
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        • 2013-03-10
        相关资源
        最近更新 更多