3

我正在从 VSS 迁移到 TFS。我正在迁移的安装使用多个 VSS 数据库(其中很多)。

我正在寻找一种简单的方法来确定每个 vss 数据库的最后一次签入的日期和时间,以便我可以知道是否需要刷新 TFS 中已经存在的代码。

在高层次上,我想写一个这样的方法:

DateTime GetLatestCheckIn(string pathToVssDatabase) {}

有没有办法用 VSS COM API 来完成这个?

4

1 回答 1

1

我想我明白了!

这是一个非常粗略的剪辑,只是一个显示最新更新和更新日期的控制台应用程序。这效率不高——现在我知道该怎么做,我将消除排序并只做一次,比较最近的项目,但是,这里是它的要点:


    class Program
    {
        static void Main(string[] args)
        {
            //Environment.CurrentDirectory = @"c:\Program Files (x86)\Microsoft Visual SourceSafe Upgrade";
            IVSSDatabase db = new VSSDatabase();

            db.Open(@"ThePath\srcsafe.ini", "Admin", "ThePassword");
            IVSSItem rootFolder = db.get_VSSItem("$/", false);
            var versions = new List();
            foreach (IVSSVersion item in rootFolder.get_Versions((int)Microsoft.VisualStudio.SourceSafe.Interop.VSSFlags.VSSFLAG_RECURSYES))
            {
                versions.Add(new VersionInfo()
                {
                    ItemName = item.VSSItem.Name,
                    ItemFullPath = item.VSSItem.Spec,
                    ItemVersionDate = item.Date,
                    ItemVersionNumber = item.VersionNumber
                });
            }

            // echo all 
            var versionInfo = versions.OrderByDescending(i => i.ItemVersionDate).First();
            Console.WriteLine("{0} {1}", versionInfo.ItemFullPath, versionInfo.ItemVersionDate);
            Console.ReadLine();
        }
    }

    class VersionInfo
    {
        public string ItemName { get; set; }
        public string ItemFullPath { get; set; }
        public DateTime ItemVersionDate { get; set; }
        public int ItemVersionNumber { get; set; }
    }
于 2013-02-28T00:19:22.990 回答