SharpSVN 不会遍历所有子目录和文件

本文关键字:子目录 文件 遍历 SharpSVN | 更新日期: 2023-09-27 18:33:49

按照此处找到的代码:如何在SharpSvn中检查文件是否受源代码控制?

我正在尝试制作一个小型实用程序应用程序,该应用程序将迭代指定的文件夹并打印出所有文件的状态。

    private void btnCheckSVN_Click(object sender, EventArgs e)
    {
        ParseSVNResults(CheckSVN());
    }
    private Collection<SvnStatusEventArgs> CheckSVN()
    {
        string path = @"C:'AMG'trunk'AMC";
        if (!Directory.Exists(path))
            return null;
        DevExpress.Utils.WaitDialogForm wait = new DevExpress.Utils.WaitDialogForm();
        wait.Caption = "Please wait, loading SVN file statuses. This may take a moment.";
        wait.Caption += Environment.NewLine + path;
        wait.Show();
        SvnClient client = new SvnClient();
        SvnStatusArgs sa = new SvnStatusArgs();
        sa.Depth = SvnDepth.Infinity;
        Collection<SvnStatusEventArgs> statuses;
        client.GetStatus(path, sa, out statuses);
        wait.Close();
        return statuses;
    }
    private void ParseSVNResults(Collection<SvnStatusEventArgs> results)
    {
        if (results == null)
            return;
        int modified = 0;
        int unversioned = 0;
        foreach (SvnStatusEventArgs item in results)
        {
            memoEditSVNFiles.Text += item.LocalContentStatus.ToString() + " -- " + item.Path + Environment.NewLine;
            if (item.LocalContentStatus.ToString() == "Modified")
                modified++;
            else if (item.LocalContentStatus.ToString() == "NotVersioned")
                unversioned++;
        }
        memoEditSVNFiles.Text += Environment.NewLine + "Modified: " + modified + Environment.NewLine;
        memoEditSVNFiles.Text += "Not Versioned: " + unversioned + Environment.NewLine;
        memoEditSVNFiles.Text += "Total: " + results.Count;
    }

当代码执行时,我总共得到147个文件和文件夹。实际文件夹有几千个文件。是否有可能我正在查看太多文件,而 SharpSVN 在一段时间后退出?

编辑;我刚刚尝试创建大约 100 个文本文件并将 30 个放入 3 个文件夹中,然后"嵌套"它们。所以我得到了;

C:''AMG''trunk''test 包含 ~30 个文件C:''AMG''trunk''test''Folder1 包含 ~30 个文件C:''AMG''trunk''test''Folder1''Sub 还有另外 30

如果不将其提交到存储库,当我在 C:''AMG''trunk''test 上运行上述代码而不是代码片段中的给定路径时,输出显示总共 1 个文件。

SharpSVN 不会遍历所有子目录和文件

因此,事实证明 SvnStatusArgs 类有一个默认为 false 的"RetrieveAllEntries"布尔标志。

顾名思义,设置此 true 将返回每个文件,无论它是修改/未版本控制还是最新的。

在我的原始帖子中,CheckSVN() 方法中有 1 行额外的行:

        SvnClient client = new SvnClient();
        SvnStatusArgs sa = new SvnStatusArgs();
        sa.Depth = SvnDepth.Infinity;
        sa.RetrieveAllEntries = true; //the new line
        Collection<SvnStatusEventArgs> statuses;
        client.GetStatus(path, sa, out statuses);