2

ここにあるコードに従ってください: ファイルが 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 つのファイルが表示されます。

4

1 に答える 1

2

したがって、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);
于 2013-10-02T18:58:17.753 に答える