1

精简版

我想弄清楚如何获取项目的日期。我感兴趣的日期是 SourceSafe 用户界面中显示的日期:

在此处输入图像描述

在此示例中,日期为2020 年 6 月 9 日上午 11:49

长版

使用 Microsoft Visual SouceSafe COM API,您可以访问IVssItem

//InterfaceID: {2A0DE0EA-2E9F-11D0-9236-00AA00A1EB95}
public interface IVSSItem
{
   public string Spec { get; set; }
   public Boolean Binary { get; set; }
   public Boolean Deleted { get; set; }
   public VSSItemType Type { get; }
   public String LocalSpec { get; set; }
   public String Name { get; set; }
   public IVSSItem Parent { get; }
   public Int32 VersionNumber { get; }
   public IVSSItems Items(Boolean IncludeDeleted) { get; }
   public void Get(ref String Local; VSSFlags iFlags);
   public void Checkout(String Comment, String Local, VSSFlags iFlags);     
   public void Checkin(String Comment, String Local, VSSFlags iFlags);
   public UndoCheckout(String Local, VSSFlags iFlags);
   public VSSFileStatus IsCheckedOut { get; }
   public IVSSCheckouts Checkouts { get; }
   public Boolean IsDifferent(String Local) { get; }
   public IVSSItem Add(String Local, String Comment, VSSFlags iFlags);
   public IVSSItem NewSubproject(String Name, String Comment);
   public void Share(IVSSItem pIItem: IVSSItem, String Comment, VSSFlags iFlags);
   public void Destroy();
   public void Move(IVSSItem pINewParent);
   public void Label(String Label, String Comment);
   public IVSSVersions Versions(VSSFlags iFlags) { get; }
   public IVSSItem Version(VARIANT Version) { get; }
   public IVSSItems Links { get; }
   public IVSSItem Branch(String Comment, VSSFlags iFlags);
}

问题是我看不到任何访问可以在 SourceSafe 用户界面中看到的日期的方法。

研究

Johannnes Knaupp 在 2001 年提出了同样的问题。在该线程中,有人建议查找项目日期的方法是查看最后一个IVssVersion的日期。

IVSSVersion 确实有一个日期:

//InterfaceID {783CD4E8-9D54-11CF-B8EE-00608CC9A71F}
public interface IVSSVersion
{
   String Username { get; }
   Int32 VersionNumber { get; }
   String Action { get; }
   DateTime Date { get; }  <--------------------
   String Comment { get; }
   String Label { get; }
   String IVSSItem VSSItem { get; }
}

很遗憾:

  • 那不是文件的日期
  • 那是采取行动的日期

这甚至可以在 SourceSafe 用户界面中看到:

在此处输入图像描述

并且可以通过API确认。

约翰内斯早在 2001 年就注意到了这一点:

这些日期不相同:

在 10:05 创建的文件可以在 10:08 签入。

更重要的是,IVssVersion.Date这并不代表对文件的更改。它代表采取了一些行动

  • “添加”
  • “存档”
  • “存档版本”
  • “版本分支”
  • “入住”
  • “创造”
  • “已删除”
  • “毁了”
  • “贴上标签”
  • “搬来”
  • “搬去”
  • “固定到版本”
  • “清除”
  • “恢复”
  • “改名为”
  • “恢复”
  • “回滚到版本”
  • “共享”
  • “未固定”

更糟:

  • 如果我从今天开始添加文件6/19/1999
  • 行动日期将是“今天”
  • 而不是6/19/1999

所以问题是:

  • 怎么做?
  • 如何读取DateTime文件?
  • SourceSafe 用户界面是如何做到的?
4

0 回答 0