簡體   English   中英

如何獲取所有 TFS 變更集的數據表

[英]How do I get a DataTable of all my TFS Changesets

我正在嘗試使用我的 TFS 項目變更集的詳細信息填充數據表。

我試圖得到:

  • 每行代表一個單一的變更提交
  • 過濾后僅顯示在兩個指定日期之間輸入的更改提交。

DataTable 設置了以下列:

  • 文件夾路徑
  • 文檔名稱
  • 項目名
  • 用戶名
  • 輸入日期時間
  • 信息

我希望以這樣的方式結束:

在此處輸入圖片說明

我的主要問題是我不知道在哪里可以找到更改提交數據以迭代填充我的 DataTable。

我想到了

添加對以下內容的引用:

微軟團隊基金會

Microsoft.TeamFoundation.Client

Microsoft.TeamFoundation.Common

Microsoft.TeamFoundation.WorkItemTracking.Client

Microsoft.TeamFoundation.WorkItemTracking.Common

Form1.cs的代碼如下:

using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using Microsoft.TeamFoundation.Server;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using System.Collections.Generic;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace TFSAPItest
{
    public partial class Form1 : Form
    {
        public static List<Changeset> BaseChangesets { get; set; }

        public Form1()
        {
            InitializeComponent();
            
            TxtDateFrom.Text = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy");

            TxtDateTo.Text = DateTime.Now.ToString("dd/MM/yyyy");
            
        }

        private void BtnRefresh_Click(object sender, EventArgs e)
        {
            DateTime DateFrom = DateTime.Parse(TxtDateFrom.Text);

            DateTime DateTo = DateTime.Parse(TxtDateTo.Text);
            
            DataTable dt = new DataTable();
            dt.Columns.Add("file_path");
            dt.Columns.Add("filename");
            dt.Columns.Add("project");
            dt.Columns.Add("username");
            dt.Columns.Add("datetime_entered");
            dt.Columns.Add("message");

            List<Changeset> FilteredChangesets = new List<Changeset>();

            foreach (Changeset c in BaseChangesets)
            {
                if(c.CreationDate > DateFrom && c.CreationDate < DateTo)
                {
                    FilteredChangesets.Add(c);

                }

            }

            foreach (Changeset c in FilteredChangesets)
            {
                List<Change> Changes = c.Changes.ToList<Change>();
                
                if (Changes != null && Changes.Count > 0)
                {
                    foreach (Change ch in Changes)
                    {
                        if (ch.Item.ItemType == ItemType.File)
                        {
                            DataRow dr = dt.NewRow();

                            string ServerItem = ch.Item.ServerItem.Substring(ch.Item.ServerItem.IndexOf('/') + 1, ch.Item.ServerItem.Length - ch.Item.ServerItem.IndexOf('/') - 1);

                            dr["file_path"] = ServerItem.Substring(0, ServerItem.LastIndexOf('/'));
                            dr["filename"] = ServerItem.Substring(ServerItem.LastIndexOf('/') + 1, ServerItem.Length - ServerItem.LastIndexOf('/') - 1);
                            dr["project"] = ServerItem.Substring(0, ServerItem.IndexOf('/'));
                            dr["username"] = c.Committer;
                            dr["datetime_entered"] = c.CreationDate.ToString("dd/MM/yyyy HH:mm");
                            dr["message"] = c.Comment;

                            dt.Rows.Add(dr);

                        }

                    }

                }

            }
            
            DgvResults.DataSource = dt;
            
        }

        private void BtnGetInformation_Click(object sender, EventArgs e)
        {
            TfsTeamProjectCollection ProjectCollection = new TfsTeamProjectCollection(new Uri("http://example.com:8080/tfs/ProjectCollection"));

            ProjectCollection.Connect(ConnectOptions.None);

            var vcs = ProjectCollection.GetService<VersionControlServer>();

            VersionSpec versionFrom = VersionSpec.ParseSingleSpec("C529", null);

            VersionSpec versionTo = VersionSpec.Latest;

            string serverPath = @"$/";

            List<Changeset> Changesets = vcs.QueryHistory(serverPath,
              VersionSpec.Latest,
              0,
              RecursionType.Full,
              null,
              versionFrom,
              versionTo,
              Int32.MaxValue,
              true,
              false
              ).Cast<Changeset>().ToList<Changeset>();

            BaseChangesets = Changesets;

            if(BaseChangesets != null)
            {
                GrpDateFilter.Enabled = true;

            }

        }

    }

}

有趣的部分是在 BtnGetInformation_Click 方法中。

它有點慢,因為它遍歷整個 TFS,但它有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM