以编程方式确定VSS数据库中的最新签入

时间:2013-02-27 22:54:36

标签: c# visual-sourcesafe

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

我正在寻找一种简单的方法来确定每个vss数据库上次登记的日期和时间,这样我就可以知道是否需要刷新已经在TFS中的代码。

在高级别,我想写一个像这样的方法:

DateTime GetLatestCheckIn(string pathToVssDatabase) {}

有没有办法使用VSS COM API实现这一目标?

1 个答案:

答案 0 :(得分:0)

我想我明白了!

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


    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; }
    }