0

私がやろうとしているのは、特定の時間枠の間にテスト TFS チーム プロジェクトにプッシュされたすべての .sql スクリプトを見つけて、ファイルを表示するためのリンクを取得するか、ワークスペースの外側にそのコピーをダウンロードすることです。したがって、最新のものを取得する必要はありません。これは、アプリケーションが特定の期間中に実行されたすべての具体的な .sql 変更を確認するためのものです。次に、これらのファイルをブランチ環境と比較して、どの .sql がコピーされ、データベースに対して実行されたかを判断します。

ファイルを表示するためのリンクを取得するか、ファイルをダウンロードするかで行き詰まっています。ファイルをダウンロードする際に予想される問題は、何百ものファイルをダウンロードすることであり、最終的に各ファイルを表示して、.sql スクリプトを Test 以外の別の環境に対して再実行できるかどうかを判断することになります。

 public void GetChangesets(DataTable files,
                           bool excludeManualDatabaseFiles,
                           bool containsExcludedDerictoriesAndFiles)
    {
        // this gets collection-lvl services, in contrast to TfsConfigurationServer (server-lvl)
        Uri serverUri = new Uri("<insert serverUri>");
        var tpc = new TfsTeamProjectCollection(serverUri);
        var vcs = tpc.GetService<VersionControlServer>();

        DateTime testDate;
        DateTime.TryParse("2017-07-01", out testDate);

        VersionSpec fromDateVersion = new DateVersionSpec(testDate);
        VersionSpec toDateVersion = new DateVersionSpec(DateTime.Now);

        vcs.QueryRootBranchObjects(RecursionType.Full);

        string teamProjectName = "<insert team project name>";
        TeamProject[] tps = new TeamProject[]
        {
            vcs.GetTeamProject(teamProjectName)
        };

        DataTable returnedChangesetDetail = new DataTable();
        // Step 1: THIS WORKS
        returnedChangesetDetail.Columns.Add("FileName");
        // Step 2: THIS DOES NOT WORK, this is currently empty !!!!!!
        returnedChangesetDetail.Columns.Add("Uri");


        foreach(TeamProject tp in tps)
        {
            IEnumerable changesets = vcs.QueryHistory(string.Concat("$/", tp.Name, "/Test/SQL"), 
                VersionSpec.Latest,
                deletionId: 0,
                recursion: RecursionType.Full,
                user: null,
                versionFrom: fromDateVersion,
                versionTo: toDateVersion,
                maxCount: int.MaxValue,
                includeChanges: true,
                slotMode: true);



            foreach(Changeset changeset in changesets)
            {

                foreach(Change change in changeset.Changes)
                {
                    string fileName = change.Item.ServerItem;
                    // I think this would be it but its not an accessible link, do I add/remove
                    // something to make this a Uri?
                    //var artifactUrui = change.Item.ArtifactUri; 

                    // Step 1: WORKING
                    lstbxFileNames.Items.Add(fileName);

                 }
            }

        }

    }

コメントが私が探しているものを説明してくれることを願っています。これは、開発者ではないが技術ユーザーが環境に必要な変更を確認できるアプリです。約 100 個のファイルを確認する必要があります。Uri を使用すると、変更を確認し、後で必要なファイルを選択し、ステップ 1 で見つかったが不要と判断された変更を無視する簡単な方法になると考えていました。

4

1 に答える 1